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 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 VIEW


  • Declaração SQL CREATE VIEW
  • Em SQL, uma View é uma tabela virtual baseada no conjunto de resultados de uma declaração SQL
  • Uma View contém linhas e colunas exatamente como uma tabela real. Os campos na View são campos de uma ou mais tabelas reais no BD


  • Podemos adicionar funções SQL como as declarações WHERE e JOIN para uma View e apresentar os dados como se os dados estiverem se originados de uma única tabela


Sintaxa de criação para uma View
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition


  • Exemplo:
  • A View "Lista de Produtos Atuais" mostra todos os produtos ativos de uma tabela Produtos.
    • Veja:
CREATE VIEW Lista de Produtos Atuais AS
SELECT IdProduto,NomeProduto
FROM Produtos
WHERE Discontinuado=No
  • Pode-se pesquisar a View da seguinte forma:


SELECT * FROM Lista de Produtos Atuais

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 inserçõ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 VIEW


  • Uma View pode ser apagada com o comando:
DROP VIEW view_name


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.


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 VIEW


  • Uma View pode ser atualizada com a seguinte sintaxe:
    • SQL CREATE OR REPLACE VIEW Syntax



CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition


  • Exemplos: Adicionar a coluna "Categoria" para a "Lista de Produtos Atuais".
CREATE VIEW [Lista de Produtos Atuais] AS
SELECT IdProduto, NomeProduto, Categoria
FROM Produtos
WHERE Discontinuado=No


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
    • RESET: 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.


SGBD


  • MySQL
  • PostgreSQL


  • DDL
    • Criar DataBase
    • Criar tabela Empregados
    • Criar indíce IndNome
    • Alterar tabela incluindo coluna Sexo com 1 caracter
    • Criar tabela Vaidurarpouco, com colunas ident, descrição
    • Dropar tabela Vaidurarpoucoas
    • Avaliar Types do SGBD
    • Entender como se usa as Constraints
    • Especificar Domains
  • DML
    • ...