Linguagem de Definição de Dados (DDL)

21
1 Módulo 6 Módulo 6 A Linguagem SQL A Linguagem SQL Linguagem de Definição de Linguagem de Definição de Dados (DDL) Dados (DDL) Linguagem de definição de Linguagem de definição de dados (DDL) dados (DDL) A linguagem de definição de dados permite a criação, manutenção e eliminação de objetos do banco de dados: tabelas visões índices seqüências sinônimos

Transcript of Linguagem de Definição de Dados (DDL)

Page 1: Linguagem de Definição de Dados (DDL)

1

Módulo 6Módulo 6

A Linguagem SQLA Linguagem SQL

Linguagem de Definição de Linguagem de Definição de Dados (DDL)Dados (DDL)

Linguagem de definição de Linguagem de definição de dados (DDL)dados (DDL)

� A linguagem de definição de dados permite a criação, manutenção e eliminação de objetos do banco de dados:� tabelas

�visões

� índices

�seqüências

�sinônimos

Page 2: Linguagem de Definição de Dados (DDL)

2

Convenções de NomesConvenções de Nomes

� Devem começar com uma letra

� Pode ter de 1 a 30 caracteres

� Pode conter somente A-Z, a-z, 0-9, _, $ e #

� Os nomes devem ser únicos por usuário

� Não podem ser utilizadas palavras reservadas (salvo se entre aspas)

Comando CREATE TABLEComando CREATE TABLE

� Permite a criação de uma tabela:� CREATE TABLE nome_da_tabela (

nome_da_coluna tipo_de_dado [NULL|NOT

NULL] restrições_de_coluna, ...

restrições_de_tabela);

� CREATE TABLE autores (

cod_autor NUMBER (4) NOT NULL,

nome VARCHAR2 (100) NOT NULL,

descricao VARCHAR2 (1024)

);

Page 3: Linguagem de Definição de Dados (DDL)

3

Restrições de Integridade de Restrições de Integridade de TabelasTabelas

�CONSTRAINT nome_da_restrição PRIMARY KEY (colunas)

�CONSTRAINT nome_da_restrição FOREIGN KEY (colunas) REFERENCES nome_da_tabela_pai [ON DELETE CASCADE]

�CONSTRAINT nome_da_restrição UNIQUE (colunas)

�CONSTRAINT nome_da_restrição CHECK (expressao)

Restrições de Integridade de Restrições de Integridade de ColunasColunas

�CONSTRAINT nome_da_restrição NOT NULL

�CONSTRAINT nome_da_restrição PRIMARY KEY

�CONSTRAINT nome_da_restrição REFERENCES nome_da_tabela_pai [ON DELETE CASCADE]

�CONSTRAINT nome_da_restrição UNIQUE

�CONSTRAINT nome_da_restrição CHECK (expressao

Page 4: Linguagem de Definição de Dados (DDL)

4

ExemploExemplocreate table usuarios (

cod_usuario number ( 6 ),nome varchar2 ( 100 )

constraint nn_usu_nome not null,cpf char ( 11 )

constraint nn_usu_cpf not null,email varchar2 ( 40 )

constraint nn_usu_email not null,username varchar2 ( 20 )

constraint nn_usu_username not null,password varchar2 ( 20 )

constraint nn_usu_password_not null,constraint pk_usuarios primary key (cod_usuario),constraint ak_usu_cpf unique (cpf),constraint ak_usu_username unique (username));

ExemploExemplo

create table produtos (

cod_produto number ( 5 ) not null,

titulo varchar2 ( 200 ) not null,

ano_lancamento date not null,

importado char ( 1 ) not null,

preco number ( 10, 2 ) not null,

prazo_entrega number ( 3 ) not null,

constraint pk_produtos

primary key (cod_produto),

constraint chk_prod_importado

check (importado in ('S','N'))

);

Page 5: Linguagem de Definição de Dados (DDL)

5

ExemploExemplo

create table administradores (

cod_administrador number ( 6 ),

nivel_privilegio number ( 1 ) not null,

constraint pk_administradores primary key

(cod_administrador),

constraint fk_usu_adm foreign key

(cod_administrador) references usuarios

(cod_usuario)

);

Definindo Valores PadrãoDefinindo Valores Padrão

� Pode ser definido um valor padrão para uma coluna (literais, expressões ou funções)

� Se não for definido um valor, será utilizado o padrão� create table pedidos (num_pedido number ( 7 ),cod_cliente number ( 6 ) not null,cod_endereco number ( 2 ) not null,data_emissao date not null default sysdate,constraint pk_pedidos primary key(num_pedido));

Page 6: Linguagem de Definição de Dados (DDL)

6

Utilizando Valores PadrãoUtilizando Valores Padrão

�insert into pedidos (num_pedido, cod_cliente, cod_endereco)values (17645, 540, 290);

� Foi omitida a coluna data_emissão, logo, será utilizado o valor padrão�insert into pedidos (num_pedido, cod_cliente, cod_endereco, data_emissao)values (17645, 540, 290, NULL);

� Foi explicitamente definido NULL

Consultando o Dicionário de Consultando o Dicionário de DadosDados

� USER_TABLES: informações sobre as tabelas do usuário

� USER_OBJECTS: informações completas sobre todos os diferentes tipos de objetos (object_type) do usuário

� USER_CATALOG ou CAT: lista de todos os objetos e seus respectivos tipos

� Consultas sobre estas tabelas (visões) fornecem informações úteis

Page 7: Linguagem de Definição de Dados (DDL)

7

Verificando as Verificando as ConstraintsConstraints

� A tabela (visão) user_constraints inclui informações sobre todas as constraints do usuário� select constraint_name, constraint_type,

search_condition

from user_constraints

where ...;

� A tabela (visão) user_cons_columns mostra as colunas envolvidas em cada constraint

Tipos de Dados BásicosTipos de Dados Básicos

� CHAR(tamanho): seqüência de caracteres de tamanho fixo

� VARCHAR(tamanho): seqüência de caracteres de tamanho variável

� NUMBER(total, decimais)

� DATE

Page 8: Linguagem de Definição de Dados (DDL)

8

Tipos de Dados para Tipos de Dados para CaracteresCaracteres

� CHAR(tamanho [BYTE | CHAR]): até 2000 bytes� Alocação de bytes é o padrão, mas podem ser alocados

CHARs, em formato Unicode

� NCHAR(tamanho): até 2000 bytes em alocaçãoUnicode (2 ou 3 bytes por caracter)

� VARCHAR2 ou VARCHAR(tamanho [BYTE | CHAR]): até 4000 bytes

� NVARCHAR2: até 4000 bytes� CLOB: até 232 – 1 bytes (4 GB)� NCLOB: até 232 – 1 bytes (4 GB) em alocação Unicode� LONG: até 231 – 1 bytes (2 GB), mantido para

compatibilidade

Tipos de Dados para Data e Tipos de Dados para Data e TempoTempo

� DATE: ano, mês, dia, hora, minuto, segundo, armazenados em 7 bytes

� INTERVAL DAY (precisão) TO SECOND (precisão): intervalos entre duas datas em dias, horas, minutos e segundos

� INTERVAL (precisão) YEAR TO MONTH: intervaloentre duas datas em anos e meses

� TIMESTAMP (precisão): valores de instantes de tempo com precisão de até 9 casas decimais nos segundos

� TIMESTAMP (precisão) WITH TIME ZONE: inclui a informação do fuso horário

� TIMESTAMP (precisão) WITH LOCAL TIME ZONE: recupera a informação ajustada ao fuso horário local

Page 9: Linguagem de Definição de Dados (DDL)

9

Tipos de Dados BináriosTipos de Dados Binários

� BLOB: até 232 – 1 bytes (4 GB) de dados binários armazenados no banco de dados

� BFILE: até 232 – 1 bytes (4 GB) de dados binários armazenados em arquivosexternos

� RAW (tamanho): armazena até 2000 bytes, mantido para compatibilidade

� LONG RAW: até 231 – 1 bytes (2 GB) , mantido para compatibilidade

Criando uma Tabela a Partir de Criando uma Tabela a Partir de uma Consultauma Consulta

� Permite a criação de uma tabela a partir do resultado de uma consulta:� CREATE TABLE nome_da_tabela (colunas) AS

select ...

� CREATE TABLE teste (cod_cliente,

nome_cliente) AS

select u.cod_usuario, u.nome

from usuarios u

where u.cod_cliente in (

select c.cod_cliente

from clientes c);

Page 10: Linguagem de Definição de Dados (DDL)

10

Comando ALTER TABLEComando ALTER TABLE

� Permite a alteração de uma tabelaALTER TABLE nome_da_tabela[ADD definição de coluna,][MODIFY definição de coluna,][DROP COLUMN nome,][RENAME COLUMN antigo TO novo,][ADD definição de constraint,][MODIFY CONSTRAINT definição de constraint,][DROP CONSTRAINT nome,][RENAME CONSTRAINT antigo TO novo,][ENABLE | DISABLE constraint,][RENAME TO novo_nome];

ExemploExemplo

� alter table pedidosadd valor_total number(10,2);

� alter table enderecosmodify cod_endereco number(3);

� alter table autoresdrop column descricao;

� alter table clientesrename column cod_usuario to cod_cliente;

Page 11: Linguagem de Definição de Dados (DDL)

11

ExemploExemplo

� alter table produtos

add constraint chk_prod_prazo

check(prazo between 3 and 30);

� alter table produtos

drop constraint

chk_prod_importado;

Comando DROP TABLEComando DROP TABLE

� Permite a eliminação de uma tabela:�DROP TABLE nome_da_tabela

[CASCADE CONSTRAINTS];

�drop table tipos_telefones

cascade constraints;

Page 12: Linguagem de Definição de Dados (DDL)

12

Comando TRUNCATE TABLEComando TRUNCATE TABLE

� Permite a eliminação de todas as linhas de uma tabela, de forma rápida e liberando o espaço alocado, sem possibilitar a execução de rollback:�TRUNCATE TABLE nome_da_tabela;

UtilizandoUtilizando VisõesVisões

� Uma visão é uma tabela virtual criada a partir de uma consulta, a fim de representar a visão de um usuário ouaplicação sobre o banco de dados

� Uma visão pode ser consultada da mesmaforma que uma tabela, mas suaatualização está sujeita a certas regras

Page 13: Linguagem de Definição de Dados (DDL)

13

UtilizandoUtilizando VisõesVisões

� Embora possua estrutura idêntica a de uma tabela, as linhas retornadas por umavisão estão armazenadas na(s) tabela(s) original(is) (tabelas-base)

Por Por queque VisõesVisões??

� Visões podem ser definidas para� Definir a percepção que um usuário ou aplicaçãopossui do banco de dados

� Simplificar a construção de consultas, definindoconsultas freqüentes ou complexas

� Possibilitar a independência de dados

� Fornecer segurança de acesso: um usuário que nãopossua direito de acesso às tabelas utilizadas navisão poderá consultá-las se possuir direito de acesso à visão

Page 14: Linguagem de Definição de Dados (DDL)

14

ComandoComando CREATE VIEWCREATE VIEW

�CREATE OR REPLACE VIEW nome AS

consulta;

�create view cliente$ as

select c.cod_cliente, u.nome,

u.cpf, u.email, u.username,

u.data_nascimento, u.data_cadastro

from usuarios u, clientes c

where u.cod_usuario =

c.cod_cliente;

Comando DROP VIEWComando DROP VIEW

� Permite a eliminação de uma visão:�DROP VIEW nome_da_tabela

[CASCADE CONSTRAINTS];

�drop table tipos_telefones

cascade constraints;

Page 15: Linguagem de Definição de Dados (DDL)

15

Comando ALTER VIEWComando ALTER VIEW

� Uma visão pode ficar inválida, caso as tabelas bases sejam modificadas

� Para revalidar uma VIEW, deve ser utilizado o comando ALTER VIEW� ALTER VIEW nome COMPILE;

Atualizações em VIEWSAtualizações em VIEWS

� Inserções (INSERT), atualizações (UPDATE) e exclusões (DELETE) em visões são permitidas, desde que obedecidas as seguintes regras:� Não é possível excluir linhas de visões que possuam funções de grupo, group by ou distinct

� Não é possível atualizar linhas em qualquer das situações anteriores e colunas definidas por expressões e a pseudo-coluna ROWNUM

� Não é possível inserir linhas em qualquer das duas situações anteriores e se existem colunas NOT NULL nas tabelas de origem que tenham ficado fora da visão

Page 16: Linguagem de Definição de Dados (DDL)

16

A opção WITH CHECK A opção WITH CHECK OPTIONOPTION

� Se utilizada na criação da visão, impede que comandos DDL nas tabelas de origem invalidem a visão�CREATE OR REPLACE VIEW nome AS

consulta WITH CHECK OPTION;

A opção WITH READ ONLYA opção WITH READ ONLY

� Se utilizada na criação da visão, impede que comandos da DML alterem o conteúdo das tabelas de origem, ou seja, impede atualizações nas visões�CREATE OR REPLACE VIEW nome AS

consulta WITH READ ONLY;

Page 17: Linguagem de Definição de Dados (DDL)

17

ExercExercícioício

� Tabela de Usuários� Código

� Nome

� Status (ativo/inativo)

� Tipo

� Tabela de Tipos� Codtipo

� Descrição

� 1. Crie as tabelas e osrelacionamentos

� 2. Popule Usuarios com pelo menos 10 registros

� 3. Popule Tipos com pelomenos três registros, sendo um o tipo“administrador”

� 4. Crie visões:� UsuariosAtivos

� UsuariosInativos

� Administradores

Comando CREATE INDEXComando CREATE INDEX

� Para criar índices deve ser utilizado o comando CREATE INDEX�CREATE [UNIQUE] INDEX nome ON

tabela(colunas);

�create index idx_usu_nome on

usuarios (nome);

� O comando DROP INDEX pode ser utilizado para eliminar um índice

Page 18: Linguagem de Definição de Dados (DDL)

18

Quando Criar Índices?Quando Criar Índices?

� A coluna é usada freqüentemente nas cláusulas WHERE ou em joins

� A coluna contém inúmeros valores distintos

� A coluna contém muitos NULL

� A tabela tem muitas linhas e as consultas normalmente retornam poucas linhas

Quando não Criar Índices?Quando não Criar Índices?

� A tabela é pequena

� As colunas não aparecem em condições ou joins

� As consultas retornam muitas linhas

� A tabela é atualizada muito freqüentemente

Page 19: Linguagem de Definição de Dados (DDL)

19

Utilizando SeqüênciasUtilizando Seqüências

� Uma sequence é um objeto do banco de dados capaz de fornecer valores seqüenciais� CREATE SEQUENCE nome[START WITH valor][INCREMENT BY valor][MAXVALUE valor | NOMAXVALUE][MINVALUE valor | NOMINVALUE][CYCLE | NOCYCLE][CACHE valor | NOCACHE][ORDER | NOORDER];

� O comando DROP SEQUENCE pode ser utilizado para eliminar uma sequence

ExemploExemplo

�create sequence seq_usuarios

start with 1

increment by 1

minvalue 1

maxvalue 999999

nocycle

cache 10

order;

Page 20: Linguagem de Definição de Dados (DDL)

20

Buscando Valores em Buscando Valores em SequencesSequences

� Para buscar o próximo valor em uma sequence, utilize a pseudo-coluna NEXTVAL�select seq_usuarios.nextval

from dual;

Buscando Valores em Buscando Valores em SequencesSequences

� Para buscar o valor atual em uma sequence, utilize a pseudo-coluna CURRVAL�select seq_usuarios.currval

from dual;

Page 21: Linguagem de Definição de Dados (DDL)

21

Utilizando SinônimosUtilizando Sinônimos

� Sinônimos são nomes alternativos pelos quais podem ser conhecidos os objetos do banco de dados (tabelas, visões, sequences, storedprocedures, etc.)

� Sinônimos podem ser públicos, acessíveis por todos os usuários, ou privados� CREATE [PUBLIC] SYNONYM nome FOR objeto;

� create public synonym usuarios for cursosql.usuarios;

� O comando DROP SYNONYM pode ser utilizado para eliminar um sinônimo