Incluindo Restrições

27
Copyright Oracle Corporation, 1999. Todos os direitos reservados. 11 11 Incluindo Restrições

description

banco de dados

Transcript of Incluindo Restrições

Page 1: Incluindo Restrições

Copyright Oracle Corporation, 1999. Todos os direitos reservados.

1111

Incluindo RestriçõesIncluindo Restrições

Page 2: Incluindo 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

Page 3: Incluindo 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

Page 4: Incluindo Restrições

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.

Page 5: Incluindo Restrições

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));

Page 6: Incluindo Restrições

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

Page 7: Incluindo Restrições

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

Page 8: Incluindo Restrições

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);

Page 9: Incluindo Restrições

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

Page 10: Incluindo Restrições

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));

Page 11: Incluindo Restrições

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

Page 12: Incluindo Restrições

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));

Page 13: Incluindo Restrições

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

Page 14: Incluindo Restrições

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));

Page 15: Incluindo Restrições

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

Page 16: Incluindo Restrições

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

Page 17: Incluindo Restrições

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);

Page 18: Incluindo Restrições

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.

Page 19: Incluindo Restrições

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.

Page 20: Incluindo Restrições

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.

Page 21: Incluindo Restrições

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.

Page 22: Incluindo Restrições

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.

Page 23: Incluindo Restrições

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.

Page 24: Incluindo Restrições

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';

Page 25: Incluindo Restrições

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

Page 26: Incluindo Restrições

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.

Page 27: Incluindo Restrições

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