A instrução CREATE

A instrução CREATE em SQL é fundamental para a criação de novos objetos na base de dados, como bases de dados, tabelas, índices, procedimentos, entre outros. Aqui, vamos focar no uso mais comum: criar basos de dados e tabelas.

CREATE DATABASE

A instrução CREATE TABLE permite criar uma nova base de dados.

Sintaxe:

CREATE DATABASE [IF NOT EXISTS] NomeBaseDados ;

NOTA: o nome da base de dados deve ser único dentro do SGBD não podendo haver duas bases de dados com o mesmo nome.

A opção IF NOT EXISTS, significa que a base de dados só será criada se ainda não existir no SGBD.

Exemplos:

CREATE DATABASE testDB;

Esta instrução cria a base de dados testDB.

CREATE DATABASE IF NOT EXISTS testDB; 

Esta instrução cria a base de dados testDB, se ela não existir ainda.

A instrução SHOW DATABASES

A instrução SHOW DATABASES mostra a lista de bases de dados existentes no SGBD.

Exemplo:

SHOW DATABASES; 

A instrução USE

A instrução USE permite selecionar uma base de dados de entre as que existem no SGBD.
Antes de usarmos instruções de SQL sobre uma base de dados esta tem de ser selecionada em primeiro lugar.

Sintaxe:

USE NomeBaseDados ;

Exemplo:

USE lojaDb; 

Esta instrução seleciona a base de dados lojaDb.

CREATE TABLE

A instrução CREATE TABLE permite criar uma tabela nova numa base de dados. A base de dados tem de estar selecionada (instrução USE).

Sintaxe:

CREATE TABLE [IF NOT EXISTS] nome_tabela 
( definição_coluna1 
... 
[,definição_colunaN] 
[, PRIMARY KEY (nome_coluna,...)] 
[, INDEX [nome_index] (nome_coluna,...)] 
[, FOREIGN KEY [index_name] (nome_coluna,...) 
REFERENCES nome_tabela(pk_nome_coluna,...)] 
) 

Definição coluna:

nome_coluna tipo_dados [NOT NULL] [DEFAULT valor] 
[PRIMARY KEY] [AUTO_INCREMENT] 

Criar uma tabela envolve dar um nome à tabela, criar todas as suas colunas, chave primária, chaves estrangeiras, indexes etc..
nome_tabela: nome da tabela.
IF NOT EXISTS: cria a tabela se ela não existir na base de dados .
definição_coluna: definição de uma nova coluna na tabela dada pelo seu nome e tipo de dados.
NOT NULL: a opção NOT NULL força a coluna a ter valores diferentes de NULL, ou seja, a estar preenchida. Isto significa que não pode criar um novo registo na tabela sem que este campo esteja preenchido.
DEFAULT: Especifica um valor de defeito para a coluna. O valor de defeito tem de ser uma constante e não pode ser o resultado de uma função ( NOW(), por exemplo) ou de uma expressão
PRIMARY KEY: A opção PRIMARY KEY especifica que este campo faz parte da chave primária da tabela. Um campo que seja chave primária tem de ter valores ÚNICOS e não pode ter valores NULL. Uma tabela só pode ter uma chave primária que pode ser constituída por um ou
mais campos.
AUTO_INCREMENT: esta opção especifica que o campo é auto-incrementado. Isto significa que para cada registo inserido o valor deste campo é incrementado de uma unidade. Aplica-se, normalmente, a campos que sejam chaves primárias.
REFERENCES: referencia um campo que seja chave estrangeira para a chave primária (pk_nome_coluna) da tabela nome_tabela.
INDEX: define a coluna nome_column_name como sendo um Index com o nome nome_index.
FOREIGN KEY: define a coluna nome_column como sendo uma Chave Estrangeira, cujo nome do index é nome_index, referencando a Chave Primária pk_nome__coluna da tabela nome_table.

Exemplo 1:

CREATE TABLE IF NOT EXISTS tasks ( 
task_id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, 
subject VARCHAR(45) DEFAULT "None", 
start_date DATE, 
end_date DATE, 
description VARCHAR(200) 
);

Exemplo 2:

CREATE TABLE IF NOT EXISTS tasks ( 
  task_id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, 
  subject VARCHAR(45) DEFAULT NULL, 
  start_date DATE DEFAULT NULL, 
  end_date DATE DEFAULT NULL, 
  description VARCHAR(200) DEFAULT NULL 
); 

Exemplo 3:

CREATE TABLE Persons ( 
    ID int NOT NULL, 
    LastName varchar(255) NOT NULL, 
    FirstName varchar(255), 
    Age int, 
    CONSTRAINT PK_Person PRIMARY KEY (ID,LastName) 
);

Esta tabela tem uma chave primária composta por dois campos.

Exemplo 4:

Criação das tabelas Customers e Orders com uma chave estrangeira em Orders que referencia a chave primária de Customers:

CREATE TABLE Customers ( 
    ID int NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    LastName varchar(255) NOT NULL, 
    FirstName varchar(255), 
    Address varchar(255) 
); 
 
CREATE TABLE Orders ( 
    OrderID int NOT NULL, 
    OrderNumber int NOT NULL, 
    CustomerID int, 
    PRIMARY KEY (OrderID), 
    FOREIGN KEY (CustomerID) REFERENCES Customers(ID) 
);

Exemplo 5:

O mesmo que no exemplo 4 mas com o uso de um Index:

CREATE TABLE Customers ( 
    ID int NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    LastName varchar(255) NOT NULL, 
    FirstName varchar(255), 
Address varchar(255) 
); 
CREATE TABLE Orders ( 
OrderID int NOT NULL PRIMARY KEY AUTO_INCREMENT, 
OrderNumber int NOT NULL, 
CustomerID int NOT NULL, 
INDEX customer_idx(CustomerID), 
FOREIGN KEY customer_idx (CustomerID) REFERENCES 
Customers(ID) 
);