Contraintes sont conçus pour prévenir les accidents dans le traitement des données et de préserver l'intégrité des données . Dans certains cas, cependant , il peut être nécessaire de reporter les contraintes de sorte qu'ils n'ont pas fait valoir leurs règles jusqu'à ce qu'une condition spécifique soit remplie . Par exemple , il est possible de reporter les règles d'une contrainte pour activer seulement quand un " commit" a été demandée. Instructions
1
créer deux tables dans SQLPlus de démontrer contraintes reportables comme suit :
CREATE TABLE test (produits
test_id INTEGER PRIMARY KEY , AB
foreign_id INTEGER NOT NULL) ;
CREATE TABLE test2 (produits
test2_id INTEGER PRIMARY KEY , AB
foreign2_id INTEGER NOT NULL
) ;
< br > 2
modifier les tables dans SQLPlus ajouter des contraintes de clés étrangères les unes aux autres comme suit :
ALTER TABLE test ADD CONSTRAINT test2REF
FOREIGN KEY ( foreign_ID ) RÉFÉRENCES test2 ( test2_ID )
initialement reportées DEFERRABLE ;
ALTER TABLE test2 Ajouter une contrainte testREF
FOREIGN KEY ( foreign2_ID ) REFERENCES essai ( test_ID )
initialement reportées DEFERRABLE ;
3
insérer des enregistrements dans les tables de SQLPlus . Cela montre qu'avec une contrainte reportables , les lignes peuvent être ajoutées en dépit des contraintes de clés étrangères :
insérer dans les valeurs de test (1, 2);
INSERT INTO test2 VALUES ( 2 , 1);
4
commettre les informations à la commande SQLPlus avec :
commettre;
Cela viendra compléter l'opération et les lignes seront ajoutées aux deux tables < br . >
5
démontrer comment il échouerait en exécutant toutes les commandes à nouveau en une seule opération , mais sans la contrainte différé . Au commandement SQLPlus entrer :
- Première baisse des tables
DROP TABLE des contraintes CASCADE d'essai;
DROP TABLE test2 des contraintes CASCADE ;
- . - maintenant, entrez toutes les commandes précédentes, mais sans les contraintes reportables comme suit:
CREATE TABLE test (produits
test_id INTEGER PRIMARY KEY , AB
foreign_id INTEGER NOT NULL
< p> ) ;
CREATE TABLE test2 (produits
test2_id INTEGER PRIMARY KEY , AB
foreign2_id INTEGER NOT NULL
) ;
ALTER TABLE test Ajouter une contrainte test2REF
FOREIGN KEY ( foreign_id ) RÉFÉRENCES test2 ( test2_id ) ;
ALTER TABLE test2 Ajouter une contrainte testREF
FOREIGN KEY ( foreign2_id ) de test Références ( test_id ) ;
insérer dans les valeurs de test (1, 2);
INSERT INTO test2 VALUES ( 2, 1 );
Cette version du script échouera comme les contraintes ont pas été reporté en attente d'une commande " commit" .