what update ejemplos does delete create constraint sql oracle

sql - update - Cómo agregar ''ON DELETE CASCADE'' en la instrucción ALTER TABLE



update delete cascade sql (7)

Para cualquiera que use MySQL:

Si se dirige a su página web de PHPMYADMIN y navega hasta la tabla que tiene la clave externa que desea actualizar, todo lo que tiene que hacer es hacer clic en la Relational view ubicada en la pestaña Structure y cambiar la opción de menú On delete seleccionada a Cascade .

Imagen que se muestra a continuación:

Tengo una restricción de clave externa en mi tabla, quiero agregar ON DELETE CASCADE a ella.

He intentado esto:

alter table child_table_name modify constraint fk_name foreign key (child_column_name) references parent_table_name (parent_column_name) on delete cascade;

No funciona

EDITAR:
La clave externa ya existe, hay datos en la columna de clave externa.

El mensaje de error que recibo después de ejecutar la declaración:

ORA-02275: such a referential constraint already exists in the table


¡Aquí hay una solución práctica! Estoy usando SQL Server 2008 R2.

Como quiera modificar la restricción FK agregando ON DELETE / UPDATE CASCADE, siga estos pasos:

NUMERO 1:

Haga clic derecho sobre la restricción y haga clic para modificar

NÚMERO 2:

Elija su restricción en el lado izquierdo (si hay más de uno). A continuación, en el lado derecho, contraiga el punto " INSERTAR Y ACTUALIZAR especificación " y especifique las acciones en Eliminar regla o Actualizar regla según lo necesite. Después de eso, cierre el cuadro de diálogo.

NUMERO 3:

El último paso es guardar estas modificaciones (¡por supuesto!)

PD: Me ha ahorrado un montón de trabajo ya que quiero modificar una clave principal a la que se hace referencia en otra tabla.


Como se explicó anteriormente:

ALTER TABLE TABLEName drop CONSTRAINT FK_CONSTRAINTNAME; ALTER TABLE TABLENAME ADD CONSTRAINT FK_CONSTRAINTNAME FOREIGN KEY (FId) REFERENCES OTHERTABLE (Id) ON DELETE CASCADE ON UPDATE NO ACTION;

Como puede ver, tienen que ser comandos separados, primero soltando y luego agregando.


Este PL * SQL escribirá en DBMS_OUTPUT una secuencia de comandos que eliminará cada restricción que no tenga eliminar cascada y la recreará con la cascada de eliminación.

NOTA: ejecutar el resultado de este script es BAJO SU PROPIO RIESGO. Lo mejor es leer el guión resultante y editarlo antes de ejecutarlo.

DECLARE CURSOR consCols (theCons VARCHAR2, theOwner VARCHAR2) IS select * from user_cons_columns where constraint_name = theCons and owner = theOwner order by position; firstCol BOOLEAN := TRUE; begin -- For each constraint FOR cons IN (select * from user_constraints where delete_rule = ''NO ACTION'' and constraint_name not like ''%MODIFIED_BY_FK'' -- these constraints we do not want delete cascade and constraint_name not like ''%CREATED_BY_FK'' order by table_name) LOOP -- Drop the constraint DBMS_OUTPUT.PUT_LINE(''ALTER TABLE '' || cons.OWNER || ''.'' || cons.TABLE_NAME || '' DROP CONSTRAINT '' || cons.CONSTRAINT_NAME || '';''); -- Re-create the constraint DBMS_OUTPUT.PUT(''ALTER TABLE '' || cons.OWNER || ''.'' || cons.TABLE_NAME || '' ADD CONSTRAINT '' || cons.CONSTRAINT_NAME || '' FOREIGN KEY (''); firstCol := TRUE; -- For each referencing column FOR consCol IN consCols(cons.CONSTRAINT_NAME, cons.OWNER) LOOP IF(firstCol) THEN firstCol := FALSE; ELSE DBMS_OUTPUT.PUT('',''); END IF; DBMS_OUTPUT.PUT(consCol.COLUMN_NAME); END LOOP; DBMS_OUTPUT.PUT('') REFERENCES ''); firstCol := TRUE; -- For each referenced column FOR consCol IN consCols(cons.R_CONSTRAINT_NAME, cons.R_OWNER) LOOP IF(firstCol) THEN DBMS_OUTPUT.PUT(consCol.OWNER); DBMS_OUTPUT.PUT(''.''); DBMS_OUTPUT.PUT(consCol.TABLE_NAME); -- This seems a bit of a kluge. DBMS_OUTPUT.PUT('' (''); firstCol := FALSE; ELSE DBMS_OUTPUT.PUT('',''); END IF; DBMS_OUTPUT.PUT(consCol.COLUMN_NAME); END LOOP; DBMS_OUTPUT.PUT_LINE('') ON DELETE CASCADE ENABLE VALIDATE;''); END LOOP; end;


Primero drop su clave externa y pruebe el comando anterior, ponga la add constraint lugar de modify constraint . Ahora este es el comando:

ALTER TABLE child_table_name ADD CONSTRAINT fk_name FOREIGN KEY (child_column_name) REFERENCES parent_table_name(parent_column_name) ON DELETE CASCADE;


Si desea cambiar una clave externa sin soltarla, puede hacer lo siguiente:

ALTER TABLE child_table_name WITH CHECK ADD FOREIGN KEY(child_column_name) REFERENCES parent_table_name (parent_column_name) ON DELETE CASCADE


No puede agregar ON DELETE CASCADE a una restricción ya existente. Deberá drop y volver a create la restricción. La documentation muestra que la cláusula MODIFY CONSTRAINT solo puede modificar el estado de una restricción (es decir: ENABLED/DISABLED ...).