Restricciones están diseñados para prevenir accidentes en el manejo de datos y preservar la integridad de los datos . En algunos casos, sin embargo , podría ser necesario aplazar las limitaciones por lo que en realidad no hacen cumplir sus reglas hasta que se cumpla una condición específica. Por ejemplo , es posible aplazar las reglas de una restricción para activar sólo cuando se ha solicitado una " confirmación " . Instrucciones
1
Crear dos tablas en SQLPlus demostrar limitaciones diferibles como sigue:
CREATE TABLE test (
test_id INTEGER PRIMARY KEY ,
foreign_id INTEGER NOT NULL);
CREATE TABLE test2 (
test2_id INTEGER PRIMARY KEY ,
foreign2_id INTEGER NOT NULL
) ;
< br > 2
Modificar los cuadros en SQLPlus añadir restricciones de clave externa entre sí de la siguiente manera :
ALTER TABLE test agregar restricción test2REF
FOREIGN KEY ( foreign_ID ) REFERENCIAS test2 ( test2_ID )
inicialmente diferidos DEFERRABLE ;
ALTER TABLE test2 Agregar restricción testref
FOREIGN KEY ( foreign2_ID ) REFERENCIAS prueba ( test_ID )
inicialmente diferidos DEFERRABLE ;
3
insertar registros en ambas tablas en SQLPlus . Esto demuestra que con una restricción prorrogable , las filas se pueden agregar a pesar de las restricciones de clave externa :
INSERT INTO valores de prueba ( 1 , 2 ) ;
INSERT INTO test2 VALUES ( 2 , 1 ) ;
4
Confirmar la información en el símbolo SQLPlus con:
cometer;
Esto completará la operación y se le añadirán las filas en las que ambas tablas < br . > Página 5
Demostrar cómo iba a fallar al ejecutar todos los comandos de nuevo en una sola operación, pero sin la restricción diferida. En el símbolo del SQLPlus escriba:
- Primera caída de las tablas
DROP TABLE prueba limitaciones CASCADE ;
Eliminar tablas test2 limitaciones CASCADE ;
- . - A continuación, introduzca los comandos anteriores, pero sin las limitaciones diferibles de la siguiente manera :
CREATE TABLE test (
test_id INTEGER PRIMARY KEY ,
foreign_id INTEGER NOT NULL
< p> ) ;
CREATE TABLE test2 (
test2_id INTEGER PRIMARY KEY ,
foreign2_id INTEGER NOT NULL
) ;
ALTER TABLE test AÑADIR test2REF RESTRICCIÓN
FOREIGN KEY ( foreign_id ) REFERENCIAS test2 ( test2_id ) ;
ALTER TABLE test2 Agregar restricción testref
FOREIGN KEY ( foreign2_id ) Prueba REFERENCIAS ( test_id ) ;
INSERT INTO valores de prueba ( 1 , 2 ) ;
INSERT INTO test2 VALUES ( 2 , 1 ) ;
Esta versión del script fallará como las restricciones tienen no se aplazó en espera de un comando " commit" .