begrensninger er laget for å hindre ulykker i databehandling og å bevare integriteten til data . I noen tilfeller kan det imidlertid være nødvendig å utsette begrensninger slik at de ikke faktisk håndheve sine regler inntil en bestemt betingelse er oppfylt . For eksempel er det mulig å utsette reglene for en begrensning for å aktivere kun når en " commit " har blitt forespurt. Instruksjoner
en
Lag to tabeller i sqlplus å demonstrere deferrable begrensninger som følger : en
CREATE TABLE test (
test_id INTEGER PRIMARY KEY , etter
foreign_id INTEGER NOT NULL) ;
CREATE TABLE test2 (
test2_id INTEGER PRIMARY KEY , etter
foreign2_id INTEGER NOT NULL
) ;
2
Alter tabellene i sqlplus å legge utenlandske viktige begrensninger til hverandre som følger : en
ALTER TABLE test aDD CONSTRAINT test2REF
FOREIGN KEY ( foreign_ID ) REFERANSER test2 ( test2_ID )
INITIALLY UTSATT DEFERRABLE ;
ALTER TABLE test2 Legg til begrensning testREF
FOREIGN KEY ( foreign2_ID ) REFERANSER test ( test_ID )
INITIALLY UTSATT DEFERRABLE ;
3
Sett poster i begge tabellene i sqlplus . Dette viser at med en deferrable begrensning, kan rader legges til tross for de utenlandske viktige begrensninger :
INSERT INTO test VALUES ( 1 , 2);
INSERT INTO test2 VALUES ( 2 , 1 );
4
forplikte informasjonen på sqlplus kommando med : en
forplikte ;
p Dette vil fullføre operasjonen og radene vil bli lagt inn i begge tabellene
5
Demonstrer hvordan det ville mislykkes ved å kjøre alle kommandoene igjen i én operasjon , men uten den utsatte begrensningen. På sqlplus kommando inn :
- Første slipp tabellene
Drop table test CASCADE begrensninger ;
Drop table test2 CASCADE begrensninger ;
- . - nå skriver alle tidligere kommandoer , men uten de deferrable begrensninger som følger : en
CREATE TABLE test (
test_id INTEGER PRIMARY KEY , etter
foreign_id INTEGER NOT NULL
< p> ) ;
CREATE TABLE test2 (
test2_id INTEGER PRIMARY KEY , foreign2_id
INTEGER NOT NULL
) ;
ALTER TABELL test ADD CONSTRAINT test2REF
FOREIGN KEY ( foreign_id ) REFERANSER test2 ( test2_id ) ;
ALTER TABLE test2 Legg til begrensning testREF
FOREIGN KEY ( foreign2_id ) REFERANSER test ( test_id ) ;
INSERT INTO test VALUES ( 1 , 2);
INSERT INTO test2 VALUES ( 2 , 1 ) ;
Denne versjonen av manuset vil mislykkes som de begrensninger har ikke blitt utsatt avventer en " COMMIT "-kommandoen .