Linguagem de Definição de Dados (DDL)
Transcript of 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
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)
);
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
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'))
);
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));
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
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
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
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);
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;
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;
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
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
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;
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
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;
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
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
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;
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;
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