?>
1-mysql Básico
Exercícios
?>

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.

Clique no botão abaixo para saber mais sobre os Mecanismos de Armazenamento (Engine Storage).

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.