2010-11-24 16 views
12

¿Hay alguna manera de anular las restricciones de clave externa de mysql en una secuencia de comandos php?Ignorar restricciones de clave externa de MySQL en PHP

Tengo una consulta pasada a mysql desde php, pero falla una restricción de clave externa, ¿hay alguna forma de evitar esto sin alterar el esquema db?

Estoy haciendo algunas pruebas, por lo que voy a eliminar la fila cuando haya terminado.

Respuesta

18
mysql_query('SET foreign_key_checks = 0'); 
//do some stuff here 
mysql_query('SET foreign_key_checks = 1'); 
6

Puede ejecutar esa consulta MySQL para desactivar las claves externas de verificación:

SET FOREIGN_KEY_CHECKS=0; 

No hay que olvidar a fin de que cuando haya terminado:

SET FOREIGN_KEY_CHECKS=1; 
2

Ejecutar la consulta: set FOREIGN_KEY_CHECKS=0;

mysql> insert into bar values(1); 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`bar`, CONSTRAINT `bar_ibfk_1` FOREIGN KEY (`foo_id`) REFERENCES `foo` (`foo_id`) ON UPDATE CASCADE) 
mysql> set FOREIGN_KEY_CHECKS=0; 
Query OK, 0 rows affected (0.00 sec) 
mysql> insert into bar values(1); 
Query OK, 1 row affected (0.00 sec) 
1

Tengo algo como esto en mi colección de fragmentos:

SET @[email protected]@FOREIGN_KEY_CHECKS; 
SET @@FOREIGN_KEY_CHECKS=0; 

-- Do stuff here 

SET @@[email protected]_FOREIGN_KEY_CHECKS; 
SET @BACKUP_FOREIGN_KEY_CHECKS=NULL; 
+0

Esta es la respuesta correcta. No recuerdo haber necesitado el doble "@@". – Xeoncross

+0

Es una de las sintaxis para las variables de sesión: 'SET SESSION FOO = 1',' SET @@ SESSION.FOO = 1' o 'SET @@ FOO = 1'. –

Cuestiones relacionadas