DDL
DDL (Data Definition Language), ou para o português linguagem de definição de dados, é uma linguagem de computador usada para a definição de estruturas de dados, especialmente para esquematizar bancos de dados. No caso, será apresentado o DDL SQL (Structured Query Language) ou Linguagem de Consulta Estruturada, que é a linguagem de pesquisa declarativa padrão para banco de dados relacional.
Declarações DDL SQL
Permite ao usuário definir tabelas e seus elementos. Os comandos básicos da DDL são o CREATE, para criar um objeto dentro da base de dados e o DROP, que apaga um objeto do banco. Alguns SGBDs usam o comando ALTER, que permite ao usuário alterar um objeto, por exemplo, adicionando uma coluna a uma tabela existente. Exemplos do uso dos comandos DDL são:
- CREATE TABLE
- CREATE INDEX
- CREATE VIEW
- ALTER TABLE
- ALTER INDEX
- DROP INDEX
- DROP VIEW
CREATE
Utilizada para construir um novo banco de dados, tabela, índice ou consulta armazenada. Os tipos de objetos que podem ser criados dependem de qual SGBD está sendo utilizado, porém a maioria suporta a criação de tabelas, índices, usuários e banco de dados. Alguns sistemas (tais como PostgreSQL) suportam o comando CREATE, e outros comandos DDL, dentro de uma transação e portanto suportam rollback.
CREATE TABLE
Talvez o comando mais comum da declaração CREATE seja o comando CREATE TABLE. A sintaxe típica é: CREATE [TEMPORARY] TABLE [nome da tabela] ([definições de colunas]) [parâmetros da tabela].
- Definições de colunas: Uma lista separada por vírgulas consistindo de qualquer uma das seguintes
- Definição de coluna: [nome da coluna] [tipo de dado] {NULL|NOT NULL} {opções de coluna}
- Definição de chave primária: PRIMARY KEY([lista de colunas separadas por vírgulas])
- CONSTRAINTS:{CONSTRAINT} [definição de limite]
- Funcionalidade específica de SGBDR
Um exemplo de comando para criação de uma tabela chamada empregados com algumas colunas, em alguns SGBDs seria:
CREATE TABLE empregados ( id INTEGER PRIMARY KEY, nome CHAR(50) NULL, sobrenome CHAR(75) NOT NULL, data_de_aniversario DATE NULL );
A instrução de criação de tabela a seguir cria uma tabela de teste com algumas das DDL disponível para diferentes tipos de dados:
CREATE TABLE TestAllTypes
(
MyText TEXT(50),
MyMemo MEMO,
MyByte BYTE,
MyInteger INTEGER,
MyLong LONG,
MyAutoNumber COUNTER,
MySingle SINGLE,
MyDouble DOUBLE,
MyCurrency CURRENCY,
MyReplicaID GUID,
MyDateTime DATETIME,
MyYesNo YESNO,
MyOleObject LONGBINARY,
MyBinary BINARY(50)
)
- Alfanuméricos: Contém cifras e letras. Apresentam uma longitude limitada - 255 caracteres
- Numéricos: Existem de vários tipos, principalmente, inteiros (sem decimais) e reais (com decimais).
- Byte: 0 a 255 - 1 byte
- Integer: -32,768 a 32,767 - 2 bytes
- Long: -2,147,483,648 a 2,147,483,647 - 4 bytes
- Single: Ponto flutuante, precisão simples - 4 bytes
- Double: Ponto flutuante, precisão dupla - 8 bytes
- Currency: Moeda com 15 digitos + 4 casas decimais - 8 bytes
- Booleanos: Possuem duas formas: Verdadeiro e falso (Sim ou Não) - 1 bit
- Datas: Armazenam datas facilitando posteriormente sua exploração. Armazenar datas desta forma possibilita ordenar os registros por datas ou calcular os dias entre uma data e outra... - 8 bytes
- Memos: São campos alfanuméricos de longitude ilimitada. Apresentam o inconveniente de não poder ser indexados
- Auto-incrementáveis: São campos numéricos inteiros que incrementam em uma unidade seu valor para cada registro incorporado. Sua utilidade é mais que evidente: Servir de identificador já que são exclusivos de um registro - 4 bytes
- Ole Object: Imagens, áudios, vídeos e outros BLOBs (Binary Large OBjects) - até 1GB
- Hyperlink: links para outros arquivos incluindo web pages .
Outro exemplo, para criar uma tabela com uma chave primária de campo único com uma única instrução DDL, está na instrução a seguir, que cria uma tabela chamada TestPrimaryKey com uma chave primária no campo MyID chamado PK_MyID:
CREATE TABLE TestPrimaryKey
(
MyID LONG CONSTRAINT PK_MyID PRIMARY KEY,
FirstName TEXT(20),
LastName TEXT(20)
)
CREATE INDEX
Outro uso do CREATE é para criar índices adicionais em uma tabela existente. Os índices são utilizados principalmente para melhorar o desempenho do banco de dados, e o uso inadequado pode resultar em um pior desempenho.
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ name ] ON table_name [ USING method ]
( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
[ WITH ( storage_parameter = value [, ... ] ) ]
[ TABLESPACE tablespace_name ]
[ WHERE predicate ]
- Parâmetros:
- UNIQUE: Para garantir que só haverão registros com valores únicos. Por exemplo, para garantir que o campo NomeUsuario, da tabela de usuários, não possa ter valores repetidos
- CONCURRENTLY: Quando este opção é usada, o índice é construído sem efetuar nenhum lock que previna inseções, atualizações ou exclusões concorrentes na tabela
- COLLATE: Codificação de caracteres existente no Banco de Dados. Na migração do conteúdo de um BD, podem acontecer conflitos no collation do banco migrado. O resultado é a ausência de caracteres especiais quando informações são consultadas no banco.
- Exemplo: Se existe a palavra “Chapéu” no BD, mas quando a programação do seu site busca este item, retorna o resultado “Chap?u”, os caracteres com acentuação como (é, ã, õ, etc.) são substituídos pelo sinal ”?” (interrogação).
- NULLS FIRST: Especifica que os nulos serão ordenados antes dos não-nulos.
DROP
Utilizada para remover um banco de dados, tabela, índice ou visão existente.
DROP TABLE
Um uso típico é DROP tipo_do_objeto nome_do_objeto. Por exemplo, o comando para excluir uma tabela chamada empregados seria:
DROP TABLE empregados;
A declaração DROP é diferente das declarações DELETE e (não padronizada) TRUNCATE, em que estas não removem a tabela, de fato. Por exemplo, uma declaração DELETE poderia deletar alguns (ou todos) dados da tabela enquanto deixaria a tabela propriamente dita no banco de dados, enquanto que uma declaração DROP removeria a tabela inteira do banco de dados.
- Delete: Remove linhas da tabela. Após a execução de uma operação DELETE, precisaremos de um Comitt ou Rollback para efetuar uma alteração permanente ou desfaze-la.
- Truncate: Remova todas as linhas de uma tabela,. A operação não aceita rollback. É mais rápida.
DROP INDEX
Remove um índice existente do sistema de banco de dados. Para executar este comando é necessário ser o dono do índice.
DROP INDEX [CONCURRENTLY] [IF EXISTS] nome [, ...] [CASCADE | RESTRICT]
A instrução DDL a seguir exclui permanentemente o índice chamado MyUnusedIndex na tabela OverIndexedTable.
DROP INDEX MyUnusedIndex ON OverIndexedTable
- IF EXISTS: Não lança um erro se o índice não existir. Um aviso é emitido neste caso
- CASCADE: Automaticamente, elimina os objetos que dependem do índice
- RESTRICT: Inibe a eliminação do índice se qualquer objeto depender dele. Padrão.
- Cascade: Automaticamente dropa objetos que dependem da tabela (como visões)
- Restrict: Recusa o Drop se algum objeto depende dele.
ALTER
Utilizada para modifica um objeto existente do banco de dados.
ALTER TABLE
O comando ALTER TABLE altera a definição de uma tabela.
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
action [, ... ]
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
RENAME [ COLUMN ] column_name TO new_column_name
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
RENAME CONSTRAINT constraint_name TO new_constraint_name
ALTER TABLE [ IF EXISTS ] name
RENAME TO new_name
ALTER TABLE [ IF EXISTS ] name
SET SCHEMA new_schema
- ONLY: Se ONLY for especificado, somente esta tabela será alterada. Se ONLY não for especificado, a tabela e todas as suas tabelas descendentes (caso existam) são alteradas
- Um uso comum é ALTER tipo_do_objeto nome_do_objeto parâmetros. Por exemplo, o comando para adicionar(e então remover) uma coluna chamada bolhas para uma tabela existente chamada pia seria:
ALTER TABLE pia ADD bolhas INTEGER; ALTER TABLE pia DROP COLUMN bolhas;
ALTER INDEX
É usado para alterar a definição de um índice existente.
ALTER INDEX [ IF EXISTS ] name RENAME TO new_name ALTER INDEX [ IF EXISTS ] name SET TABLESPACE tablespace_name ALTER INDEX [ IF EXISTS ] name SET ( storage_parameter = value [, ... ] ) ALTER INDEX [ IF EXISTS ] name RESET ( storage_parameter [, ... ] )
- Parâmetros:
- RENAME: Muda o nome do índice. Não há efeito sobre os dados armazenados.
- SET TABLESPACE: Muda o espaço de tabelas do índice para o espaço de tabelas especificado, movendo os arquivos de dados associados ao índice para o novo espaço de tabelas
- SET: Altera um ou mais parâmetros de armazenamento específico do método do índice
- mRESET: Redefine um ou mais parâmetros de armazenamento específicos do método do índice para o seu valor padrão. Da mesma forma que no SET, poderá ser necessário utilizar REINDEX para atualizar todo o índice.
Ver Também
O PostgreSQL disponibiliza uma página para ajuda nestas instruções.
A Oracle também disponibiliza uma página para ajuda nestas instruções.