Restrições são projetados para evitar acidentes no manuseio de dados e para preservar a integridade dos dados . Em alguns casos , no entanto , pode ser necessário protelar restrições , de forma que não efectivamente executar as suas regras , até uma determinada condição . Por exemplo, é possível adiar as regras de um constrangimento para ativar somente quando um " commit" foi solicitado. Instruções
1
Criar duas tabelas em SQLPlus demonstrar limitações diferimento da seguinte forma:
CRIAR TABLE teste (
test_id INTEGER PRIMARY KEY,
foreign_id INTEGER NOT NULL );
CRIAR test2 mesa (
test2_id INTEGER PRIMARY KEY ,
foreign2_id INTEGER NOT NULL
);
< br > 2
alterar as tabelas em SQLPlus para adicionar restrições de chave estrangeira para o outro como se segue:
ALTER TABLE teste aDD CONSTRAINT test2REF
FOREIGN KEY ( foreign_ID ) REFERÊNCIAS teste2 ( test2_ID )
INICIALMENTE FUTUROS DEFERRABLE ;
ALTER TABLE ADD CONSTRAINT test2 testREF
FOREIGN KEY teste ( foreign2_ID ) Referências ( test_ID )
DEFERRABLE INICIALMENTE diferido;
Insere registros
3
em ambas as tabelas em SQLPlus . Isso mostra que com uma restrição adiável , as linhas podem ser adicionadas , apesar das restrições de chaves estrangeiras :
INSERT INTO test VALUES (1, 2);
INSERT INTO teste2 VALUES (2 , 1);
4
Commit a informação no comando SQLPlus com :
Commit ;
Isto irá completar a operação e as linhas serão adicionadas para ambas as tabelas < br. >
5
Demonstrar como ele iria falhar , executando todos os comandos novamente em uma única operação , mas sem a restrição adiada. Nos SQLPlus comando digite:
- Primeiro eliminar as tabelas
Teste de queda mesa restrições em cascata;
gota mesa test2 restrições em cascata;
- . - Agora entre todos os comandos anteriores, mas sem as limitações diferimento da seguinte forma:
CRIAR TABLE teste (
test_id INTEGER PRIMARY KEY,
foreign_id INTEGER NOT NULL
);
CRIAR test2 mesa (
test2_id INTEGER PRIMARY KEY ,
foreign2_id INTEGER NOT NULL
);
ALTER teste TABLE ADD CONSTRAINT test2REF
FOREIGN KEY ( foreign_id ) REFERÊNCIAS teste2 ( test2_id );
ALTER TABLE ADD CONSTRAINT test2 testREF
FOREIGN KEY teste ( foreign2_id ) Referências ( test_id ) ;
INSERT INTO test VALUES (1, 2 );
INSERT INTO teste2 VALUES (2 , 1);
Esta versão do script irá falhar como as restrições têm não foram adiadas à espera de um " COMMIT " comando .