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