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