Os Comandos DDL
Os comandos DDL são responsáveis por manipular objetos em um banco de dados. Mais especificamente, por meio dos comandos DDL, é possível criar, alterar e excluir toda a estrutura necessária para o banco de dados funcionar, tais como tabelas, índices, visões, etc. Esta seção dedica-se a mostrar o funcionamento básico de três comandos DDL: CREATE
, DELETE
e ALTER
.
Comando CREATE
O comando CREATE
é responsável pela criação de objetos no Banco de Dados. O comando CREATE
possui a sintaxe descrita abaixo.
CREATE objeto parametros
O trecho objeto
representa o objeto do banco a ser criado (database, table, view, etc.), e o trecho parametros
descreve os parâmetros necessários para criação de cada objeto.
CREATE DATABASE
O comando CREATE DATABASE
permite a criação de um banco de dados para se trabalhar. O comando possui a seguinte sintaxe: CREATE DATABASE nome_do_banco
.
O trecho de código a seguir exemplifica a utilização do comando para criação do banco de dados TodoList.
/* Criando um banco de dados... */
CREATE DATABASE TodoList;
/* Listando os banco de dados... */
SHOW DATABASES;
/* Selecionando o banco de dados... */
USE TodoList;
/* Saindo do banco de dados... */
QUIT;
CREATE TABLE
O comando CREATE TABLE
permite a criação de tabelas em um banco de dados. O comando para criação da tabela possui a seguinte sintaxe:
CREATE TABLE nome-da-tabela
(nome-do-campo1 tipo-do-campo1,
nome-do-campo2 tipo-do-campo2);
Os parâmetros do comando estão descritos em detalhes abaixo:
- nome-da-tabela: O nome da da tabela a ser criada
- nome-do-campoN: Nome de uma coluna da tabela
- nome-da-tabela: Tipo da coluna da tabela
É importante ressaltar que os tipos das colunas são pre-definidas pelo próprio SGBD. Esses tipos são considerados tipos primários, uma vez que são disponibilizados pelo próprio SGBD. A Tabela abaixo descreve os principais tipos primitivos existentes:
Tipo | Comando | Descrição |
---|---|---|
Inteiro | integer ou int |
Números entre -2.147.483.648 e 2.147.483.647 |
Inteiro Pequeno | smallint |
Números entre -32.768 e 32.767 |
Decimal | decimal ou numeric |
Números com 30 casas decimais |
Dupla precisão | double |
Números com dupla precisa de até 30 casas decimais |
Data | date |
Datas no formato AAAA-MM-DD |
Hora | time |
Para tempo no formado HH:MM:SS |
Caracteres | char(tamanho) |
Para armazenar uma sequência de caracteres |
Caracteres | varchar(tamanho) |
Armazena uma sequência de caracteres, porém de forma otimizada |
Outros tipos de dados podem ser armazenados, tais como matrizes e arquivos binários (vídeos, imagens e documentos). Bancos de dados também podem apresentar tipos de dados exclusivos, como por exemplo o tipo booleano, onde em alguns bancos de dados existe o tipo boolean, enquanto em outros o tipo é smallint(1).
Ainda, é possível definir valores padrão para as colunas de uma Tabela no momento de sua criação. Para isso, basta utilizar a palavra DEFAULT
no final da declaração da coluna, junto com o valor default propriamente dito.
O trecho de código abaixo contém um exemplo completo do comando para a criação da tabela tasks no banco de dados TodoList. É importante observar os demais comandos do trecho. Para criar uma tabela, antes de tudo é preciso selecionar em qual banco de dados essa tabela será criada. Essa informação pode ser dada por meio do comando USE
. O comando SHOW TABLES
mostra todas as tabelas existentes no banco de dados. Por fim, o comando DESC
descreve as características de uma determinada tabela.
/* Selecionando o banco de dados... */
USE TodoList;
/* Criando uma tabela... */
CREATE TABLE usuarios (
codigo INT,
nome VARCHAR(40) NOT NULL,
endereco VARCHAR(60),
idade INT DEFAULT '18',
saldo DECIMAL(10,2));
/* Listando as tabelas... */
SHOW TABLES;
/* Descrevendo uma tabela... */
DESC usuarios;
ALTER TABLE
Este comando permite alterar as características de uma determinada tabela, tais como renomear seu nome ou de suas colunas, alterar o tipo das colunas, ou mesmo adicionar novas colunas na tabela. O código abaixo mostra a sintaxe básica do comando ALTER TABLE
.
ALTER TABLE nome_tabela
ACAO
O parâmetro nome_tabela
representa o nome da tabela que sofrerá as alterações, e o parâmetro ACAO
representa a ação de modificação a ser realizada na tabela. Mais especificamente, o comando ALTER TABLE
admite as seguintes ações:
- Renomear nome da tabela
ALTER TABLE nome_tabela CHANGE coluna_antiga coluna_nova tipo;
- Adicionar uma nova coluna
ALTER TABLE nome_tabela ADD nome_coluna tipo_coluna;
- Remover uma coluna existente
ALTER TABLE nome_tabela DROP nome_coluna;
- Alterar o tipo de uma coluna
ALTER TABLE nome_tabela MODIFY COLUMN coluna novo_tipo;
O trecho de código abaixo exemplifica a utilização de cada uma das ações possíveis para o comando ALTER TABLE
:
/* altera o nome de uma coluna */
ALTER TABLE usuarios
CHANGE codigo id INT;
/* adiciona uma nova coluna */
ALTER TABLE usuarios
ADD sexo VARCHAR(1);
/* remove uma determinada coluna */
ALTER TABLE usuarios
DROP saldo;
/* muda o tipo de uma determinada coluna */
ALTER TABLE usuarios
MODIFY COLUMN sexo BIT;
É preciso tomar um cuidado especial ao alterar as colunas quando a tabela já possui dados armazenados, uma vez que - ao alterar uma determinada coluna - seus dados poderão ser perdidos. Neste caso, recomenda-se a execução dos seguintes passos:
- Identificar todas as restrições existentes onde esta tabela esteja envolvida
- Remover todas as restrições
- Adicionar uma nova coluna com nome diferente
- Copiar os dados da coluna original para a nova usando uma função de conversão de tipos de dados
- Remover a coluna original
- Renomear a nova coluna para que fique com o mesmo nome que a original
- Recriar as restrições identificadas inicialmente tendo em atenção que o tipo de dados mudou
DROP
O comando DROP
faz a remoção de objetos do banco de dados. Mais especificamente, por meio do DROP
é possível remover índices, visões, tabelas e até mesmo um banco de dados inteiro, se necessário. O comando DROP
possui a seguinte sintaxe: DROP objeto nome_objeto
, onde o parâmetro objeto
representa o tipo do objeto que será excluído, e o parâmetro nome_objeto
representa o nome do objeto que será excluído.
O trecho de código abaixo mostra a utilização do comando DROP
para remoção de alguns objetos de um banco de dados:
/* Remove tabela usuarios */
DROP TABLE usuarios;
/* Remove banco de dados TodoList */
DROP database TodoList;
CONSTRAINT
O comando CONSTRAINT
permite a criação de restrições no banco de dados. Essas restrições podem ser adicionadas de duas formas: (a) no momento da criação da tabela no banco de dados, ou após a criação da tabela, por meio do comando ALTER TABLE
. Em ambos os casos, a criação de uma CONSTRAINT
deve seguir o exemplo abaixo:
CONSTRAINT nome_constraint constraint parametros
O parâmetro nome_constraint
representa o nome que será dado a nova CONSTRAINT
criada. O parâmetro constraint
representa qual restrição será aplicada. Por fim, o parâmetro parametros
contém os parâmetros necessários para criação daquela restrição
Mais especificamente, este comando permite a adição das seguintes restrições:
- Chaves Primárias
CONSTRAINT nome_constraint PRIMARY KEY (colunas)
- Chaves Estrangeiras
CONSTRAINT nome_constraint FOREIGN KEY (coluna_local) REFERENCES Persons(coluna_referenciada) [ON UPDATE acao] [ON DELETE acao]
- Chaves alternativas
CONSTRAINT nome_constraint UNIQUE (colunas)
- Campos obrigatórios: Exceção aos demais comandos, uma vez que se utiliza o comando
MODIFY
para adicionar tal restrição.MODIFY coluna tipo_coluna NOT NULL;
O trecho de código abaixo exemplifica o uso de tais restrições em um banco de dados:
/* adiciona uma chave primária a tabela usuários */
ALTER TABLE usuarios
ADD CONSTRAINT pk_usuarios PRIMARY KEY (id);
/* cria tabela categoria */
CREATE TABLE categorias(
id INT AUTO_INCREMENT NOT NULL,
nome VARCHAR(50),
CONSTRAINT pk_categoria PRIMARY KEY (id),
CONSTRAINT uk_categoria UNIQUE (nome)
);
/* adiciona uma restrição a tabela categorias */
ALTER TABLE categorias
MODIFY nome VARCHAR(50) NOT NULL;
/* cria tabela tarefas */
CREATE TABLE tarefas (
id INT AUTO_INCREMENT NOT NULL,
descricao VARCHAR(200),
data_limite DATE,
usuario_id INT,
categoria_id INT,
CONSTRAINT pk_tarefa PRIMARY KEY (id),
CONSTRAINT fk_tarefa_categoria FOREIGN KEY (categoria_id)
REFERENCES categorias(id),
CONSTRAINT fk_tarefa_usuario FOREIGN KEY (usuario_id)
REFERENCES usuarios(id)
ON DELETE CASCADE
);