5-Criando Bancos de Dados e Tabelas
Neste capítulo vamos trabalhar alguns comandos básicos do mysql(SQL). Vamos aprender como
- Criar um banco de dados
- Criar tabelas
Vamos criar um banco de dados para armazenar as informações sobre os CDs de música. Apesar de quase não termos CDs mais, quem ainda tem gostaria de tê-los organizados. E para organizar as informações, nada como um banco de dados...
Repare que podemos pensar em diferentes bancos de dados, e para um banco de dados podemos pensar em diferentes organizações. Podemos ter um banco de dados com informações de CDs de apenas uma pessoa ou podemos ter um banco de dados mais geral, que organize os dados de várias pessoas.
Você pode também pensar em Banco de Dados para armazenar informações pessoais, como uma agenda de contatos. Ou um banco para armazenar informaçõs dos seus livros.
Pensar na organização do Banco de Dados é uma tarefa importante: é a parte de projeto.
No presente caso, vamos nos preocupar com a parte operacional, do programa mysql. Nas próximas unidades veremos aspectos do projeto.
Vamos ver os diferentes comandos para trabalhar com esse (muito simples) banco de dados.
Privilégios
A questão dos privilégios é determinante nas operações com o nosso SGBD.
No caso do Mysql, os comandos GRANT e REVOKE são usados para determinar esses privilégios dos usuários.
No presente caso, consideramos que você tem permissão (privilégio) para criar banco de dados e tabelas.
Criando o banco de dados CDTeca
1) entre no sistema
Entrando no mysql
mf@mf-dell:~$ mysql -u fantini -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.22 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
2) Crie o banco de dados
Criando o Banco de Dados
mysql> create database IF NOT EXISTS CDTeca;
Query OK, 1 row affected (0.11 sec)
A opção "IF NOT EXISTS" (se não existir) é opcional.
Repare que seu eu tentar criar um banco que já existe, o mysql acusará erro:Criando o Banco de Dados
mysql> create database CDTeca;
ERROR 1007 (HY000): Can't create database 'CDTeca'; database exists
Caso eu use a opção IF NOT EXISTS, haverá warning, e o banco obviamente não será criado.
3) Determinando o banco de dados de trabalho e visualizando suas tabelas
Para definir qual será o banco corrente para ser trabalhado, deve-se usar a instrução USE:
Definindo o BD de Trabalho e vendo suas tabelas
mysql> use CDTeca
Database changed
mysql> show tables;
Empty set (0.01 sec)
Repare que (obviamente) no Banco de Dados CDs não há tabelas criadas (Empty set).
4) Criando tabelas
Para criarmos tabelas em um Banco de Dados temos que planejar bem a estrutura, incluindo, por exemplo, como escolher os campos das tabelas, as relações entre as tabelas, quais os campos são usados para associar uma tabela em outra, como separar os dados em tabelas, para mencionar algumas questões.
No caso desse nosso banco CDTeca, não há muita dificuldade. É um banco bem simples. Precisamos armazenar informações dos CDTeca. Uma sugestão é dada na tabela abaixo (apresento os campos e alguns dados da tabela):
| ID | Autor | Album | País | TipoMúsica | Ano | Músicas |
|---|---|---|---|---|---|---|
| 1 | Elomar, Xangai, Outros | Cantoria 1 | Brasil | MPB | 1980 | 12 |
| 2 | Elomar, Xangai, Outros | Cantoria 2 | Brasil | MPB | 1980 | 12 |
| 3 | Pink Floyd | Final Cut | Inglaterra | RockProgress | 1980 | 12 | 4 | Pink Floyd | The Wall | Inglaterra | RockProgress | 1980 | 12 |
Quando pensamos na tabela, temos que pensar quais os campos iremos definir. E quais tipos de dados de cada campo. O SQL (e o muysql) possuem dezenas de tipos de dados, dentre os quais:
- Tipos numéricos
- Tipos string
- Tipos Data
Veja no site do mysql explicações detalhadas sobre os tipos de dados do SQL e do mysql: Data Types.
Para ver mais tipos de dados (detalhadamente), clique no botão dado abaixo.
Tipos de Dados SQL
continuação...criando tabelas
Para criar tabelas usamos a instrução CREATE TABLE.
Sintaxe da Instrução "CREATE TABLE"
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]
ou, mais detalhadamente:
CREATE TABLE [IF NOT EXISTS] NOME_DA_TABELA(
coluna_1_definicao,
coluna_2_definicao,
...,
restricoes
) ENGINE=storage_engine;
Estrutura da Instrução "CREATE TABLE"
Especificamos o nome da tabela que vamos criar após as palavras-chave CREATE TABLE. O nome da tabela deve ser exclusivo em um banco de dados. O "IF NOT EXISTS" é opcional.
Especificamos uma lista de colunas da tabela. As colunas são separadas por vírgulas.
Podemos, opcionalmente, especificar o mecanismo de armazenamento (Engine Storage) para a tabela na cláusula ENGINE. Você pode usar qualquer mecanismo de armazenamento, como InnoDB e MyISAM. Se você não declarar explicitamente um mecanismo de armazenamento, o MySQL usará InnoDB por padrão.
Como definir uma Coluna
Sintaxe da Instrução "CREATE TABLE"
NOME_COL TIPO_DE_DADO(comp) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] restrições;
- NOME_COL especifica o nome da coluna. TIPO_DE_DADO define o tipo de dados da coluna. Cada coluna tem um tipo de dados específico e tamanho opcional, por exemplo, VARCHAR (255)
A restrição NOT NULL garante que a coluna não conterá NULL, ou seja, o campo não pode ser vazio. Além da restrição NOT NULL, uma coluna pode ter restrições adicionais, como CHECK e UNIQUE.
O DEFAULT especifica um valor padrão para a coluna.
O AUTO_INCREMENT indica que o valor da coluna é incrementado automaticamente sempre que uma nova linha é inserida na tabela. Cada tabela possui no máximo uma coluna AUTO_INCREMENT.
Após a lista de colunas, você pode definir as restrições da tabela como UNIQUE, CHECK, PRIMARY KEY e FOREIGN KEY.
Vide mais detalhes sobre essa instrução, clicando aqui
A instrução CREATE TABLE é usada com a informação do nome da tabela e dos CAMPOS (colunas).
Para criar a tabela que contém informações dos cds, podemos fazer assim:Criando a Tabela CDs
CREATE TABLE IF NOT EXISTS CDs (
id INT NOT NULL,
Autor VARCHAR(50) NOT NULL,
Album VARCHAR(30),
Pais VARCHAR(20),
TipoMusica VARCHAR(20),
NumMusicas INT,
Ano year
);
Lista das Instruções no Mysql
Criando e Visualizando a tabela CDs
mysql> CREATE TABLE IF NOT EXISTS CDs
(id INT NOT NULL,
Autor VARCHAR(50) NOT NULL,
Album VARCHAR(30),
Pais VARCHAR(20),
TipoMusica VARCHAR(20),
NumMusicas INT,
Ano year );
Query OK, 0 rows affected (0.18 sec)
mysql> show tables;
+------------------+
| Tables_in_CDTeca |
+------------------+
| CDs |
+------------------+
1 row in set (0.00 sec)
mysql> describe CDs;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id | int | NO | | NULL | |
| Autor | varchar(50) | NO | | NULL | |
| Album | varchar(30) | YES | | NULL | |
| Pais | varchar(20) | YES | | NULL | |
| TipoMusica | varchar(20) | YES | | NULL | |
| NumMusicas | int | YES | | NULL | |
| Ano | year | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
No caso acima, falamos que apenas os campos (colunas) id e Autor são "NOT NULL".
Repare que não atribuimos valores default para as colunas.
Repare que não definimos campo AUTO-INCREMENT nem PRIMARY-KEY.
IMPORTANTE
Mesmo sendo "case insensitive" para seus comandos, o mysql é "case sensitive" para suas variáveis, nomes dos bancos e das tabelas. Por exemplo a tabela CDs, é diferente da tabela Cds.
Nome de tabela é "case sensitive"
mysql> describe Cds;
ERROR 1146 (42S02): Table 'CDTeca.Cds' doesn't exist
IMPORTANTE
Podemos usar a notação ponto (.) para especificar a tabela, mencionando no comando o nome do banco, seguindo pelo ponto (.) e nome da tabela. Assim, o comando de criação da tabela poderia ser assim:
Outra forma de usar CREATE TABLE
CREATE TABLE IF NOT EXISTS CDTeca.CDs (
id INT NOT NULL,
Autor VARCHAR(50) NOT NULL,
Album VARCHAR(30),
Pais VARCHAR(20),
TipoMusica VARCHAR(20),
NumMusicas INT,
Ano year
);
e podemos fazer:
mysql> describe CDTeca.CDs;
Exercício de Fixação
No seu mysql crie o banco de dados CDTeca e a tabela CDs, como explicado nesse capítulo.
Opcionalmente, se desejar criar outro banco com outra(s) tabela(s), esteja a vontade. Pode criar bancos para savar dados que ache relevantes ou simplesmente para testes do que aprendeu até o momento.