As restrições da Oracle são principalmente para manter a integridade dos dados no nível da lógica de negócios. Principalmente por programadores para especificar restrições na aplicação ou definindo gatilhos para manter a integridade dos dados e, finalmente, usando as próprias restrições da Oracle para manter a integridade dos dados. Se você puder usar as próprias restrições da Oracle para atender aos requisitos, tente usar as próprias restrições da Oracle, porque o uso de restrições definidas pelo usuário, como gatilhos, afetará o desempenho do banco de dados. Por exemplo: ao usar gatilhos, a tabela será bloqueada e serão realizadas varreduras de tabela ou de índice, o que reduzirá o desempenho e a simultaneidade do banco de dados.
As restrições Oracle são divididas principalmente nos seguintes tipos:
não nulo restrição não nula, restrição única única, restrição de chave primária de chave primária, restrição de chave estrangeira de chave estrangeira, restrição de verificação.
restrição não nula não nula:
Método de criação: 1. Definir no nível da coluna ao criar a tabela (ou seja, você só pode escrever a definição da restrição após a coluna ao definir a tabela), 2 métodos. Um usa nomes de restrições personalizados e o outro usa nomes padrão do sistema.
visualizar cópia simples para impressão da área de transferência?
criar tabela t
(
tid number(8) restrição NK_t1 não nula,
tname varchar2(10) não nulo
)
criar tabela t
(
tid number(8) restrição NK_t1 não nula,
tname varchar2(10) não nulo
)
visualizar cópia simples para impressão da área de transferência?
SQL> selecione t.constraint_name, t.table_name, t.status, t.deferrable de user_constraints t;
CONSTRAINT_NAME TABLE_NAME STATUS DEFERRÁVEL
-------------------------------------------------- ------ ----------------
NK_T1 T HABILITADO NÃO DIFERÍVEL
SYS_C003735 T ATIVADO NÃO DIFERÍVEL
SQL>
SQL> selecione t.constraint_name, t.table_name, t.status, t.deferrable de user_constraints t;
CONSTRAINT_NAME TABLE_NAME STATUS DEFERRÁVEL
-------------------------------------------------- ------ ----------------
NK_T1 T HABILITADO NÃO DIFERÍVEL
SYS_C003735 T ATIVADO NÃO DIFERÍVEL
SQL>
2. Modifique a tabela após ela ser criada, mas certifique-se de que os dados da tabela não violem as restrições.
visualizar cópia simples para impressão da área de transferência?
SQL> alterar tabela para modificar tid não nulo;
Tabela alterada
SQL> selecione t.constraint_name, t.table_name, t.status, t.deferrable de user_constraints t;
CONSTRAINT_NAME TABLE_NAME STATUS DEFERRÁVEL
-------------------------------------------------- ------ ----------------
SYS_C003736 T ATIVADO NÃO DIFERÍVEL
SQL>
SQL> alterar tabela para modificar tid não nulo;
Tabela alterada
SQL> selecione t.constraint_name, t.table_name, t.status, t.deferrable de user_constraints t;
CONSTRAINT_NAME TABLE_NAME STATUS DEFERRÁVEL
-------------------------------------------------- ------ ----------------
SYS_C003736 T ATIVADO NÃO DIFERÍVEL
SQL>
verificar restrições
Método de criação: Pode ser definido no nível da tabela e no nível da coluna (pode ser definido após a coluna ou após a definição da coluna). Existem também 2 formas de definição.
visualizar cópia simples para impressão da área de transferência?
SQL> criar tabela t
2 (
3 número tid(8) ,
4 nome varchar2(10),
5 verificação de restrição CK_T1 ((tid não é nulo) e (tid> 0))
6)
7/
Tabela criada
SQL> alterar tabela t adicionar restrição verificação CK_T2 (tname não é nulo);
Tabela alterada
SQL> selecione t.constraint_name, t.table_name, t.status, t.deferrable de user_constraints t;
CONSTRAINT_NAME TABLE_NAME STATUS DEFERRÁVEL
-------------------------------------------------- ------ ----------------
CK_T1 T HABILITADO NÃO DIFERÍVEL
CK_T2 T ATIVADO NÃO DIFERÍVEL
SQL>
SQL> criar tabela t
2 (
3 número tid(8) ,
4 nome varchar2(10),
5 verificação de restrição CK_T1 ((tid não é nulo) e (tid> 0))
6)
7/
Tabela criada
SQL> alterar tabela t adicionar restrição verificação CK_T2 (tname não é nulo);
Tabela alterada
SQL> selecione t.constraint_name, t.table_name, t.status, t.deferrable de user_constraints t;
CONSTRAINT_NAME TABLE_NAME STATUS DEFERRÁVEL
-------------------------------------------------- ------ ----------------
CK_T1 T HABILITADO NÃO DIFERÍVEL
CK_T2 T ATIVADO NÃO DIFERÍVEL
SQL>
A restrição CK_T1 garante que a coluna tid não pode estar vazia e é maior que 0, e CK_T2 garante que iname não pode estar vazia. As restrições de verificação também podem ser regras entre diferentes colunas da mesma linha.
restrição única
Método de criação: se uma coluna exclusiva contiver apenas uma coluna, ela poderá ser definida no nível da coluna. Se uma coluna exclusiva contiver várias colunas, ela só poderá ser definida no nível da tabela.
visualizar cópia simples para impressão da área de transferência?
SQL>criar tabela t2
2 (
Restrição de número de 3 vídeos VK_T1 exclusivo,
4 nome varchar2(10),
5 vsex varchar2(10),
6 restrição VK_T2 única(vname,vsex)
7)
8/
Tabela criada
SQL> selecione t.constraint_name, t.table_name, t.status, t.validated, t.deferrable de user_constraints t;
CONSTRAINT_NAME TABLE_NAME STATUS VALIDADO DEFERRÁVEL
--------------- ---------- -------- ---------- ------- -------
VK_T1 T2 HABILITADO VALIDADO NÃO DIFERÍVEL
VK_T2 T2 HABILITADO VALIDADO NÃO DIFERÍVEL
SQL>
SQL>criar tabela t2
2 (
Restrição de número de 3 vídeos VK_T1 exclusivo,
4 nome varchar2(10),
5 vsex varchar2(10),
6 restrição VK_T2 única(vname,vsex)
7)
8/
Tabela criada
SQL> selecione t.constraint_name, t.table_name, t.status, t.validated, t.deferrable de user_constraints t;
CONSTRAINT_NAME TABLE_NAME STATUS VALIDADO DEFERRÁVEL
--------------- ---------- -------- ---------- ------- -------
VK_T1 T2 HABILITADO VALIDADO NÃO DIFERÍVEL
VK_T2 T2 HABILITADO VALIDADO NÃO DIFERÍVEL
SQL>
Quando a restrição exclusiva for criada, um índice será gerado (pode ser um índice único, portanto também pode ser um índice não exclusivo, dependendo se a tabela é especificada ao criar a tabela para verificar as restrições de dados imediatamente quando o dados são inseridos):
visualizar cópia simples para impressão da área de transferência?
SQL> selecione t.index_name, t.table_name, t.uniqueness de user_indexes t;
INDEX_NAME TABLE_NAME UNIQUENESS
---------- ---------- ----------
VK_T1 T2 ÚNICO
VK_T2 T2 ÚNICO
SQL> selecione t.index_name, t.table_name, t.uniqueness de user_indexes t;
INDEX_NAME TABLE_NAME UNIQUENESS
---------- ---------- ----------
VK_T1 T2 ÚNICO
VK_T2 T2 ÚNICO
Como existe um índice, você pode especificar o local de armazenamento do índice e alguns parâmetros de armazenamento ao criar a tabela.
visualizar cópia simples para impressão da área de transferência?
SQL>criar tabela t2
2 (
Restrição de número de 3 vídeos VK_T1 exclusivo,
4 nome varchar2(10),
5 vsex varchar2(10),
6 restrição VK_T2 exclusiva (vname,vsex) usando índice de espaço de tabela indx
7 armazenamento (100k iniciais, próximos 100k pctincrease 0)
8 não registro
9)
10/
Tabela criada
SQL>criar tabela t2
2 (
Restrição de número de 3 vídeos VK_T1 exclusivo,
4 nome varchar2(10),
5 vsex varchar2(10),
6 restrição VK_T2 exclusiva (vname,vsex) usando índice de espaço de tabela indx
7 armazenamento (100k iniciais, próximos 100k pctincrease 0)
8 não registro
9)
10/
Tabela criada
O espaço de tabela onde o índice restrito é armazenado é o espaço de tabela indx, o tamanho do bloco inicial é 100k e nenhum log é gerado para operações dml (mas os logs também são gerados por outros motivos, mas há menos logs do que o log padrão)
restrição de chave primária de chave primária
Método de criação: A chave primária é composta principalmente de não-nulos e exclusividade. Uma tabela pode conter apenas uma chave primária, mas uma chave primária pode conter várias colunas.
visualizar cópia simples para impressão da área de transferência?
SQL>criar tabela t2
2 (
Restrição de número de 3 vídeos VK_T1 exclusivo,
4 nome varchar2(10),
5 vsex varchar2(10),
6 chave primária VK_T2 de restrição (vname,vsex) usando o espaço de tabela de índice indx
7 armazenamento (100k iniciais, próximos 100k pctincrease 0)
8 não registro
9)
10/
Tabela criada
SQL>criar tabela t2
2 (
Restrição de número de 3 vídeos VK_T1 exclusivo,
4 nome varchar2(10),
5 vsex varchar2(10),
6 chave primária VK_T2 de restrição (vname,vsex) usando o espaço de tabela de índice indx
7 armazenamento (100k iniciais, próximos 100k pctincrease 0)
8 não registro
9)
10/
Tabela criada
chave estrangeira chave estrangeira
Método de criação: As tabelas envolvidas na chave estrangeira podem ter duas ou uma tabela. No caso de duas tabelas, a chave referenciada por um campo em uma tabela filha deve ser a chave primária da tabela mais gorda. A restrição é estabelecida na tabela filha, indicando que o valor do campo da tabela deve existir na tabela pai ou ser um valor NULL.
visualizar cópia simples para impressão da área de transferência?
SQL> criar departamento de tabela
2 (
3 fez o número (8),
4 nome varchar2(20),
5 restrição de chave primária PK_DEPT (fez)
6)
7/
Tabela criada
SQL>
SQL> criar tabela emp
2 (
3 número eid (8) chave primária,
4 nomeie varchar2(20),
5 fez número(8) /*departamento de referências(did)*/,
6 nome varchar2(20),
7 restrição FK_EMP2 chave estrangeira (did) faz referência ao departamento (did)
8)
9/
Tabela criada
SQL> criar departamento de tabela
2 (
3 fez o número (8),
4 nome varchar2(20),
5 restrição de chave primária PK_DEPT (fez)
6)
7/
Tabela criada
SQL>
SQL> criar tabela emp
2 (
3 número eid (8) chave primária,
4 nomeie varchar2(20),
5 fez número(8) /*departamento de referências(did)*/,
6 nome varchar2(20),
7 restrição FK_EMP2 chave estrangeira (did) faz referência ao departamento (did)
8)
9/
Tabela criada
Como a chave estrangeira (chave estrangeira) é determinada pela chave de referência (chave de referência), haverá restrições ao realizar atualizações, descarte, exclusão e outras operações na tabela do pai. Especificamente, é determinado pelo status das restrições de chave estrangeira.
excluir em ação, excluir cascata, excluir conjunto nulo
Excluir na ação é a configuração padrão Se você excluir os dados na tabela fater, o Oracle bloqueará a tabela de palavras e, em seguida, verificará a tabela (se houver uma coluna de chave estrangeira, verificará o índice) e então os dados não existirão. a coluna de chave estrangeira na tabela filho é permitida.
delete cascade também exclui a linha correspondente na tabela de palavras.
delete set null, os dados correspondentes à coluna de chave estrangeira na tabela de barras tornam-se NULL.
visualizar cópia simples para impressão da área de transferência?
criar tabela emp
(
número eid (8) chave primária,
nomear varchar2(20),
fez número(8) /*departamento de referências(did)*/,
nome varchar2(20),
restrição FK_EMP2 chave estrangeira (did) faz referência a dept (did) ao excluir conjunto nulo
)
criar tabela emp
(
número eid (8) chave primária,
nomear varchar2(20),
fez número(8) /*departamento de referências(did)*/,
nome varchar2(20),
restrição FK_EMP2 chave estrangeira (did) faz referência a dept (did) ao excluir conjunto nulo
)