Copyright Oracle Corporation, 1999. Todos os direitos reservados.
1111
Incluindo RestriçõesIncluindo Restrições
11-2 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
ObjetivosObjetivos
Depois de completar esta lição, você poderá Depois de completar esta lição, você poderá fazer o seguinte:fazer o seguinte:
• Descrever restrições
• Criar e manter restrições
Depois de completar esta lição, você poderá Depois de completar esta lição, você poderá fazer o seguinte:fazer o seguinte:
• Descrever restrições
• Criar e manter restrições
11-3 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
O Que São Restrições?O Que São Restrições?
• As restrições impõem regras no nível da tabela.
• As restrições evitam que uma tabela seja deletada se houver dependências.
• Os seguintes tipos de restrição são válidos no Oracle:– NOT NULL– UNIQUE – PRIMARY KEY– FOREIGN KEY– CHECK
• As restrições impõem regras no nível da tabela.
• As restrições evitam que uma tabela seja deletada se houver dependências.
• Os seguintes tipos de restrição são válidos no Oracle:– NOT NULL– UNIQUE – PRIMARY KEY– FOREIGN KEY– CHECK
11-4 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Diretrizes sobre RestriçõesDiretrizes sobre Restrições
• Nomeie uma restrição ou o Oracle Server gerará um nome usando o formato SYS_Cn.
• Crie uma restrição:
– No momento em que a tabela for criada
– Depois que a tabela tiver sido criada
• Defina uma restrição no nível da coluna ou da tabela.
• Exiba uma restrição no dicionário de dados.
• Nomeie uma restrição ou o Oracle Server gerará um nome usando o formato SYS_Cn.
• Crie uma restrição:
– No momento em que a tabela for criada
– Depois que a tabela tiver sido criada
• Defina uma restrição no nível da coluna ou da tabela.
• Exiba uma restrição no dicionário de dados.
11-5 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Definindo RestriçõesDefinindo Restrições
CREATE TABLE [esquema.]tabela (tipo de dados da coluna [DEFAULT expr]
[column_constraint],...[table_constraint][,...]);
CREATE TABLE emp( empno NUMBER(4), ename VARCHAR2(10), ... deptno NUMBER(2) NOT NULL,
CONSTRAINT emp_empno_pk PRIMARY KEY (EMPNO));
11-6 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Definindo RestriçõesDefinindo Restrições
• Nível de restrição da coluna
• Nível de restrição da tabela
• Nível de restrição da coluna
• Nível de restrição da tabela
coluna [CONSTRAINT constraint_name] constraint_type,coluna [CONSTRAINT constraint_name] constraint_type,
coluna,... [CONSTRAINT constraint_name] constraint_type (coluna, ...),
coluna,... [CONSTRAINT constraint_name] constraint_type (coluna, ...),
11-7 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
A Restrição NOT NULLA Restrição NOT NULL
Assegura que os valores nulos não sejam Assegura que os valores nulos não sejam permitidos para a colunapermitidos para a colunaAssegura que os valores nulos não sejam Assegura que os valores nulos não sejam permitidos para a colunapermitidos para a coluna
EMPEMP
EMPNO ENAME JOB ... COMM DEPTNO
7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ...
Restrição NOT NULLRestrição NOT NULL(nenhuma linha pode (nenhuma linha pode conter um valor nulo para conter um valor nulo para esta coluna)esta coluna)
Ausência da restrição Ausência da restrição NOT NULLNOT NULL(qualquer linha pode (qualquer linha pode conter um valor nulo para conter um valor nulo para esta coluna)esta coluna)
Restrição NOT NULLRestrição NOT NULL
11-8 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
A Restrição NOT NULLA Restrição NOT NULL
Definida no nível da colunaDefinida no nível da colunaDefinida no nível da colunaDefinida no nível da coluna
SQL> CREATE TABLE emp( 2 empno NUMBER(4), 3 ename VARCHAR2(10) NOT NULL, 4 job VARCHAR2(9), 5 mgr NUMBER(4), 6 hiredate DATE, 7 sal NUMBER(7,2), 8 comm NUMBER(7,2), 9 deptno NUMBER(7,2) NOT NULL);
11-9 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
A Restrição UNIQUE KEYA Restrição UNIQUE KEY
DEPTDEPT
DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON
RestriçãoRestrição UNIQUE KEYUNIQUE KEY
Inserir emInserir em
50 SALES DETROIT 60 BOSTON
Não permitidoNão permitido(DNAME-SALES já existe)(DNAME-SALES já existe)
PermitidoPermitido
11-10 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
A Restrição UNIQUE KEYA Restrição UNIQUE KEY
Definida no nível da tabela ou da colunaDefinida no nível da tabela ou da colunaDefinida no nível da tabela ou da colunaDefinida no nível da tabela ou da coluna
SQL> CREATE TABLE dept( 2 deptno NUMBER(2), 3 dname VARCHAR2(14), 4 loc VARCHAR2(13), 5 CONSTRAINT dept_dname_uk UNIQUE(dname));
11-11 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
A Restrição PRIMARY KEYA Restrição PRIMARY KEY
DEPTDEPT
DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON
PRIMARY KEYPRIMARY KEY
Inserir emInserir em
20 MARKETING DALLAS
FINANCE NEW YORK
Não permitidoNão permitido(DEPTNO 20 já existe(DEPTNO 20 já existe))
Não permitidoNão permitido(DEPTNO é nulo(DEPTNO é nulo))
11-12 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
A Restrição PRIMARY KEYA Restrição PRIMARY KEY
Definida no nível da tabela ou da colunaDefinida no nível da tabela ou da colunaDefinida no nível da tabela ou da colunaDefinida no nível da tabela ou da coluna
SQL> CREATE TABLE dept( 2 deptno NUMBER(2), 3 dname VARCHAR2(14), 4 loc VARCHAR2(13), 5 CONSTRAINT dept_dname_uk UNIQUE (dname), 6 CONSTRAINT dept_deptno_pk PRIMARY KEY(deptno));
11-13 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
A Restrição FOREIGN KEYA Restrição FOREIGN KEY
DEPT DEPT
DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS ...
PRIMARYPRIMARYKEYKEY
EMEMPP
EMPNO ENAME JOB ... COMM DEPTNO
7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 ...
FOREIGNFOREIGNKEYKEY
7571 FORD MANAGER ... 200 9 7571 FORD MANAGER ... 200 20
Inserir emInserir em
Não Não permitido permitido (DEPTNO 9 (DEPTNO 9 não existe na não existe na tabela DEPT)tabela DEPT)
PermitidoPermitido
11-14 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
A Restrição FOREIGN KEYA Restrição FOREIGN KEY
Definida no nível da tabela ou da colunaDefinida no nível da tabela ou da colunaDefinida no nível da tabela ou da colunaDefinida no nível da tabela ou da coluna
SQL> CREATE TABLE emp( 2 empno NUMBER(4), 3 ename VARCHAR2(10) NOT NULL, 4 job VARCHAR2(9), 5 mgr NUMBER(4), 6 hiredate DATE, 7 sal NUMBER(7,2), 8 comm NUMBER(7,2), 9 deptno NUMBER(7,2) NOT NULL, 10 CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno) 11 REFERENCES dept (deptno));
11-15 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Palavras-chave da Restrição FOREIGN KEY
Palavras-chave da Restrição FOREIGN KEY
• FOREIGN KEY: Define a coluna na tabela filha no nível de restrição da tabela
• REFERENCES: Identifica a tabela e a coluna na tabela mãe
• ON DELETE CASCADE: Permite exclusão na tabela mãe e das linhas dependentes na tabela filha
• FOREIGN KEY: Define a coluna na tabela filha no nível de restrição da tabela
• REFERENCES: Identifica a tabela e a coluna na tabela mãe
• ON DELETE CASCADE: Permite exclusão na tabela mãe e das linhas dependentes na tabela filha
11-16 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
A Restrição CHECKA Restrição CHECK
• Define uma condição que cada linha deve satisfazer
• Expressões que não são permitidas:– Referências às pseudocolunas CURRVAL,
NEXTVAL, LEVEL, e ROWNUM– Chamadas para as funções SYSDATE, UID,
USER e USERENV– Consultas que se referem a outros valores
em outras linhas
• Define uma condição que cada linha deve satisfazer
• Expressões que não são permitidas:– Referências às pseudocolunas CURRVAL,
NEXTVAL, LEVEL, e ROWNUM– Chamadas para as funções SYSDATE, UID,
USER e USERENV– Consultas que se referem a outros valores
em outras linhas
..., deptno NUMBER(2), CONSTRAINT emp_deptno_ck CHECK (DEPTNO BETWEEN 10 AND 99),...
11-17 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Adicionando uma RestriçãoAdicionando uma Restrição
• Adicione ou elimine, mas não modifique uma restrição
• Ative ou desative restrições
• Adicione uma restrição NOT NULL usando a cláusula MODIFY
• Adicione ou elimine, mas não modifique uma restrição
• Ative ou desative restrições
• Adicione uma restrição NOT NULL usando a cláusula MODIFY
ALTER TABLE tabela ADD [CONSTRAINT restrição] tipo (coluna);
ALTER TABLE tabela ADD [CONSTRAINT restrição] tipo (coluna);
11-18 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Adicionando uma RestriçãoAdicionando uma Restrição
Adicione uma restrição FOREIGN KEY à Adicione uma restrição FOREIGN KEY à tabela EMP indicando que um gerente já deve tabela EMP indicando que um gerente já deve existir como um funcionário válido na tabela existir como um funcionário válido na tabela EMP.EMP.
Adicione uma restrição FOREIGN KEY à Adicione uma restrição FOREIGN KEY à tabela EMP indicando que um gerente já deve tabela EMP indicando que um gerente já deve existir como um funcionário válido na tabela existir como um funcionário válido na tabela EMP.EMP.SQL> ALTER TABLE emp 2 ADD CONSTRAINT emp_mgr_fk 3 FOREIGN KEY(mgr) REFERENCES emp(empno);Table altered.Table altered.
11-19 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Eliminando uma RestriçãoEliminando uma Restrição
• Remova a restrição do gerente da tabela EMP.
• Remova a restrição do gerente da tabela EMP.
SQL> ALTER TABLE emp 2 DROP CONSTRAINT emp_mgr_fk;Table altered.Table altered.
SQL> ALTER TABLE emp 2 DROP CONSTRAINT emp_mgr_fk;Table altered.Table altered.
• Remova a restrição PRIMARY KEY na tabela DEPT e elimine a restrição FOREIGN KEY associada na coluna EMP.DEPTNO.
• Remova a restrição PRIMARY KEY na tabela DEPT e elimine a restrição FOREIGN KEY associada na coluna EMP.DEPTNO.
SQL> ALTER TABLE dept 2 DROP PRIMARY KEY CASCADE;Table altered.Table altered.
SQL> ALTER TABLE dept 2 DROP PRIMARY KEY CASCADE;Table altered.Table altered.
11-20 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Desativando RestriçõesDesativando Restrições
• Execute a cláusula DISABLE da instrução ALTER TABLE para desativar uma restrição de integridade.
• Aplique a opção CASCADE para desativar restrições de integridade dependentes.
• Execute a cláusula DISABLE da instrução ALTER TABLE para desativar uma restrição de integridade.
• Aplique a opção CASCADE para desativar restrições de integridade dependentes.
SQL> ALTER TABLE emp 2 DISABLE CONSTRAINT emp_empno_pk CASCADE;Table altered.Table altered.
SQL> ALTER TABLE emp 2 DISABLE CONSTRAINT emp_empno_pk CASCADE;Table altered.Table altered.
11-21 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Ativando RestriçõesAtivando Restrições
• Ative uma restrição de integridade atualmente desativada na definição da tabela usando a cláusula ENABLE.
• Um índice UNIQUE ou PRIMARY KEY é automaticamente criado se você ativar uma restrição UNIQUE KEY ou PRIMARY KEY.
• Ative uma restrição de integridade atualmente desativada na definição da tabela usando a cláusula ENABLE.
• Um índice UNIQUE ou PRIMARY KEY é automaticamente criado se você ativar uma restrição UNIQUE KEY ou PRIMARY KEY.
SQL> ALTER TABLE emp 2 ENABLE CONSTRAINT emp_empno_pk;Table altered.Table altered.
SQL> ALTER TABLE emp 2 ENABLE CONSTRAINT emp_empno_pk;Table altered.Table altered.
11-22 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Restrições em CascataRestrições em Cascata
• A cláusula CASCADE CONSTRAINTS é usada junto com a cláusula DROP COLUMN.
• A cláusula CASCADE CONSTRAINTS elimina todas as restrições de integridade referenciais que se referem às chaves exclusiva e primária definidas nas colunas eliminadas.
• A cláusula CASCADE CONSTRAINTS é usada junto com a cláusula DROP COLUMN.
• A cláusula CASCADE CONSTRAINTS elimina todas as restrições de integridade referenciais que se referem às chaves exclusiva e primária definidas nas colunas eliminadas.
11-23 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Restrições em CascataRestrições em Cascata
A cláusula CASCADE CONSTRAINTS também elimina todas as restrições de várias colunas definidas nas colunas eliminadas.
A cláusula CASCADE CONSTRAINTS também elimina todas as restrições de várias colunas definidas nas colunas eliminadas.
11-24 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Verificando RestriçõesVerificando Restrições
Consulte a tabela USER_CONSTRAINTS para Consulte a tabela USER_CONSTRAINTS para ver todos os nomes e definições de restrição.ver todos os nomes e definições de restrição.Consulte a tabela USER_CONSTRAINTS para Consulte a tabela USER_CONSTRAINTS para ver todos os nomes e definições de restrição.ver todos os nomes e definições de restrição.
CONSTRAINT_NAME C SEARCH_CONDITION------------------------ - ------------------------- SYS_C00674 C EMPNO IS NOT NULL SYS_C00675 C DEPTNO IS NOT NULLEMP_EMPNO_PK P...
CONSTRAINT_NAME C SEARCH_CONDITION------------------------ - ------------------------- SYS_C00674 C EMPNO IS NOT NULL SYS_C00675 C DEPTNO IS NOT NULLEMP_EMPNO_PK P...
SQL> SELECT constraint_name, constraint_type, 2 search_condition 3 FROM user_constraints 4 WHERE table_name = 'EMP';
11-25 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Verificando Colunas Associadas com Restrições
Verificando Colunas Associadas com Restrições
CONSTRAINT_NAME COLUMN_NAME------------------------- ----------------------EMP_DEPTNO_FK DEPTNOEMP_EMPNO_PK EMPNOEMP_MGR_FK MGRSYS_C00674 EMPNOSYS_C00675 DEPTNO
CONSTRAINT_NAME COLUMN_NAME------------------------- ----------------------EMP_DEPTNO_FK DEPTNOEMP_EMPNO_PK EMPNOEMP_MGR_FK MGRSYS_C00674 EMPNOSYS_C00675 DEPTNO
SQL> SELECT constraint_name, column_name 2 FROM user_cons_columns 3 WHERE table_name = 'EMP';
Visualize as colunas associadas aos nomes de restrição na view USER_CONS_COLUMNS..Visualize as colunas associadas aos nomes de restrição na view USER_CONS_COLUMNS..
11-26 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
SumárioSumário
• Crie os seguintes tipos de restrições:
– NOT NULL
– UNIQUE
– PRIMARY KEY
– FOREIGN KEY
– CHECK
• Consulte a tabela USER_CONSTRAINTS para ver todos os nomes e definições de restrição.
• Crie os seguintes tipos de restrições:
– NOT NULL
– UNIQUE
– PRIMARY KEY
– FOREIGN KEY
– CHECK
• Consulte a tabela USER_CONSTRAINTS para ver todos os nomes e definições de restrição.
11-27 Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Visão Geral do ExercícioVisão Geral do Exercício
• Adicionando restrições às tabelas existentes
• Adicionando mais colunas a uma tabela
• Exibindo informações nas views do dicionário de dados
• Adicionando restrições às tabelas existentes
• Adicionando mais colunas a uma tabela
• Exibindo informações nas views do dicionário de dados
Top Related