2010-11-24 17 views
12

Gibt es eine Möglichkeit, mysql Fremdschlüssel Einschränkungen in einem PHP-Skript zu überschreiben?Ignorieren MySQL Fremdschlüssel Einschränkungen in PHP

Ich habe eine Abfrage von PHP an mysql übergeben, aber es scheitert eine Fremdschlüssel-Einschränkung, gibt es eine Möglichkeit, um dies zu umgehen, ohne das DB-Schema zu ändern?

Ich mache nur ein paar Tests, also werde ich die Zeile entfernen, wenn ich fertig bin.

Antwort

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

Sie können ausführen, dass MySQL-Abfrage Fremdschlüssel deaktivieren überprüfen:

SET FOREIGN_KEY_CHECKS=0; 

nicht, es zu ermöglichen Vergessen Sie, wenn Sie fertig sind:

SET FOREIGN_KEY_CHECKS=1; 
2

Führen Sie die Abfrage: 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

Ich habe so etwas in meiner Snippet-Sammlung:

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

Dies ist die richtige Antwort. Ich kann mich nicht erinnern, dass ich doppelt "@@" gebraucht habe. – Xeoncross

+0

Es ist eine der Syntaxen für Sitzungsvariablen: 'SET SESSION FOO = 1',' SET @@SESSION.FOO = 1' oder 'SET @@ FOO = 1'. –