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)
   )
  • Tipos no SQL:
    • Text Use for text or combinations of text and numbers. 255 characters maximum
    • Memo Memo is used for larger amounts of text. Stores up to 65,536 characters. Note: You cannot sort a memo field. However, they are searchable
    • Byte Allows whole numbers from 0 to 255 1 byte
    • Integer Allows whole numbers between -32,768 and 32,767 2 bytes
    • Long Allows whole numbers between -2,147,483,648 and 2,147,483,647 4 bytes
    • Single Single precision floating-point. Will handle most decimals 4 bytes
    • Double Double precision floating-point. Will handle most decimals 8 bytes
    • Currency Use for currency. Holds up to 15 digits of whole dollars, plus 4 decimal places. Tip: You can choose which country's currency to use 8 bytes
    • AutoNumber AutoNumber fields automatically give each record its own number, usually starting at 1 4 bytes
    • Date/Time Use for dates and times 8 bytes
    • Yes/No A logical field can be displayed as Yes/No, True/False, or On/Off. In code, use the constants True and False (equivalent to -1 and 0). Note: Null values are not allowed in Yes/No fields 1 bit
    • Ole Object Can store pictures, audio, video, or other BLOBs (Binary Large OBjects) up to 1GB
    • Hyperlink Contain links to other files, including 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.

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


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

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 [, ... ] )


Ver Também


O PostegreSQL disponibiliza uma página para ajuda nestas instruções.



A Oracle também disponibiliza uma página para ajuda nestas instruções.