Neste post vou tentar mostrar objetivamente como criar tabelas em um banco de dados através da linha de comando do cliente MySQL.
Dada a grande quantidade de parâmetros aceitos, a declaração CREATE TABLE é uma das mais complexas no MySQL. Por isto vou procurar simplificar através de exemplos práticos — já pressupondo que você tenha privilégios para criar novas tabelas e saiba como criar bancos de dados. Ao final do texto, vou mostrar como criar tabelas em um script PHP.
Comece por selecionar o banco de dados dentro do qual uma nova tabela será criada:
USE nome_do_banco;
Sintaxe de CREATE TABLE
De acordo com a documentação da Oracle, a sintaxe mais simplificada é esta aqui:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...)
As partes da declaração que se encontram entre []
(colchetes) são opcionais:
TEMPORARY
– indica que a tabela criada será temporária, o que significa que ela expira assim que a sua sessão no MySQL terminar. Use-a sempre que estiver fazendo testes.IF NOT EXISTS
– verifica a prévia existência da tabela e evita uma interrupção do script, causada por erro.
Os nomes das tabelas são sensíveis à caixa (case sensitive). Ou seja, tbl_name
e Tbl_Name
são dois nomes totalmente diferentes pro MySQL.
Uma tabela é composta por uma ou mais colunas, cada qual com suas definições. Vamos ver, daqui pra frente, algumas formas de definir este item durante a criação da tabela
Exemplos de criação de tabelas no MySQL
Vou começar pela criação de uma agenda telefônica, como esta que você usa no celular e é armazenável no cartão SIM, que contenha apenas strings (cadeias de caracteres) curtas – nome e telefone:
CREATE TABLE contatos ( nome VARCHAR(50) NOT NULL, telefone VARCHAR(25) NOT NULL )ENGINE=CSV;
Note que a engine escolhida foi a CSV. Leia mais sobre mecanismos de armazenamento (storage engines), para saber entender mais sobre o assunto.
Verifique se a tabela foi criada:
SHOW TABLES;
Podemos melhorar um pouco mais a tabela contatos
, ao acrescentar mais alguns campos, como sobrenome dos contatos, DDD, data de nascimento e email. Antes de criar uma nova tabela, com o mesmo nome, vamos remover a anterior:
DROP TABLE contatos;
Agora, vamos criar a nova tabela:
CREATE TABLE IF NOT EXISTS contatos ( nome VARCHAR(20), sobrenome VARCHAR(30), ddd INT(2), telefone VARCHAR(9), data_nasc DATE, email VARCHAR(30) )ENGINE=MyISAM;
Note que acrescentamos alguns outros itens a esta declaração:
- Usar
IF NOT EXISTS
é uma boa prática dentro de scripts (veremos mais sobre isto, mais afrente); - Ao final do código, optamos por um outro mecanismo de armazenamento
Saiba mais:
- Os tipos de dados suportados em tabelas MySQL
- Os mecanismos de armazenamento storage engines do MySQL
- Use a caixa de busca para encontrar mais posts sobre as tabelas no MySQL
Campos vazios, numeração automática e chave primária
Vou fazer uma apresentação rápida de alguns parâmetros que podem ser usados para melhorar a usabilidade e, mesmo, a segurança das tabelas criadas.
NOT NULL
Comumente, o desenvolvedor, ao projetar o banco de dados, não deseja que certos campos sejam deixados em branco, pelo usuário. Para evitar que isto ocorra, usa-se o parâmetro NOT NULL
– o sistema irá retornar um erro, caso o usuário não preencha os campos configurados com este parâmetro.
AUTO_INCREMENT
Quando se quer aplicar uma ação a um determinado registro, na tabela, é importante que se encontre exatamente aquele que se quer, mesmo que haja 10 pessoas registradas com o mesmo nome e sobrenome. Apagar um registro errado, por exemplo, pode ser fonte para uma grande dor de cabeça.
Ter um campo de identificação única para cada registro pode prevenir este tipo de erro. É aí que entra o parâmetro AUTO_INCREMENT
que pode ser usado para criar um campo numérico com uma identificação única e automática dentro da tabela.
PRIMARY KEY
O parâmetro PRIMARY KEY
é usado para definir uma coluna como chave primária e ajudar a identificar um registro em relação aos outros dentro da tabela. Os valores de uma chave primária têm que ser únicos e não podem ser nulos. Pense na palavra inglesa primary com o significado de principal.
Vamos ver estes conceitos aplicados ao exemplo da tabela de contatos:
DROP TABLE contatos; CREATE TABLE IF NOT EXISTS contatos ( id INT(5) AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(20) NOT NULL, sobrenome VARCHAR(30) NOT NULL, ddd INT(2), telefone VARCHAR(9) NOT NULL, data_nasc DATE, email VARCHAR(30) )ENGINE=MyISAM;
Veja abaixo o resultado que eu obtive:
DROP TABLE contatos; Query OK, 0 rows affected (0.14 sec) CREATE TABLE IF NOT EXISTS contatos ( -> id INT(5) AUTO_INCREMENT PRIMARY KEY, -> nome VARCHAR(20) NOT NULL, -> sobrenome VARCHAR(30) NOT NULL, -> ddd INT(2), -> telefone VARCHAR(9) NOT NULL, -> data_nasc DATE, -> email VARCHAR(30) -> )ENGINE=MyISAM; Query OK, 0 rows affected (0.10 sec) show tables; +--------------------+ | Tables_in_primeiro | +--------------------+ | contatos | +--------------------+ 1 row in set (0.00 sec)
Evite mensagens de erros, usando IF NOT EXISTS
Note que, ao executar este código, ele irá criar uma tabela, com o nome contatos
se ela já não existir. O que significa que o script retornará uma mensagem de erro, se você recarregar a página, logo após tê-lo executado:
Se você mudar a linha 14, acrescentando o parâmetro opcional IF NOT EXISTS
, tal como vimos no começo deste texto, a mensagem de erro não será exibida e o script prosseguirá normalmente. Veja como:
$sqlcriatabela = "CREATE TABLE IF NOT EXISTS contatos (nome VARCHAR(50), telefone VARCHAR(25));";
Mas, neste caso, isto não seria útil.
Faça o trabalho com o PHP
Até aqui, você aprendeu a criar novas tabelas e alguns parâmetros relacionados a este comando, dentro da linha de comando do cliente MySQL. Espero ter conseguido demonstrar que, embora seja complexa (pela quantidade de recursos) a declaração CREATE TABLE
não é, de modo algum, complicada.
Se estiver interessado em realizar a tarefa através da linguagem de programação PHP, leia este post — onde a construção do script em PHP é explicado com bastante detalhamento.
18 replies on “Como criar tabelas no MySQL”
Muito bom seu conteúdo, fiz um link desta postagem em um artigo no meu blog sobre A estrutura de uma tabela!
https://tecnoinfobrr.blogspot.com/2018/05/estrutura-de-uma-tabela-mysql.html
Tenho uma tabela que se relaciona com ela mesmo. E nessa tabela, tenho um ID que é a primary key e auto incremento. Na mesma tabela tenho um outro campo que dependendo da situação terá o mesmo valor do ID. Como preencher esse campo2 com o mesmo valor do ID, uma vez que não sei qual o valor do ID pois o mesmo é autoincremento?
como faz para fazer uma relação entra 2 tabelas?
Me ajudou bastante. Não sou muito fã de banco de dados. Obrigado por compartilhar! Abraços!
create database Classroom;
use Classroom;
create table F (ESTADO int, CIDADE varchar(30);
Onde está meu erro?!
Error Code: 1064
Falta o fechamento do parênteses “)” no final do comando.
substitua create table F (ESTADO int, CIDADE varchar(30);
por create table F (ESTADO int, CIDADE varchar(30));
Existe alguma forma de criar uma tabela com colunas usando informações de um formulário? por exemplo “CREATE TABLE $contato ($nome VARCHAR(50), $telefone VARCHAR(25));”; ? nao acho nenhum material que possa solucionar essa dúvida
Faça uma função que cria a tabela e outra que insere
Como que cria um banco de dados pra depois criar uma tabela dentro dele ?
Abordei o assunto “criação de banco de dados no MySQL”, com mais detalhes neste artigo. 😉
comando: CREATE DATABASE NOMEDOBANCO; E DÊ UM CONTROL ENTER.
DEPOIS utilize o comando Use e informe o nome do banco criado.
Ex:
create database teste;
use teste;
CREATE SCHEMA nome_do_bd;
muito obrigada
Elias, muito boa explicação. Você tem um exemplo de iteração entre tabelas para eu testar? Obrigado.
Até esta data, não. 😉
Usando a caixa de busca, no topo, é possível encontrar outros exemplos e tutoriais relacionados ao MySQL
muito bom essa explicação me ajudo vlw mano abraços
Opa, entendi tudo, o único problema foi na id com AUTO_INCREMENT e PRIMARY KEY, acho que não da pra fazer dessa mandeira, aqui deu erro, então dei uma googlada e achei gente com o mesmo problema.
Ótimo artigo, me ajudou bastante! Um abraço!