2010-11-24 47 views
12

PHPスクリプトでmysqlの外部キー制約を無効にする方法はありますか?PHPでMySQLの外部キーの制約を無視する

私はphpからmysqlに渡されたクエリを持っていますが、外部キー制約に失敗します.dbスキーマを変更せずにこれを回避する方法はありますか?

私はちょうどいくつかのテストをしているので、完了したら行を削除します。

答えて

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

あなたは外部キーを無効にするには、MySQLのクエリを確認することを実行することができます。

SET FOREIGN_KEY_CHECKS=0; 

が完了したら、それを有効にすることを忘れないでください:

SET FOREIGN_KEY_CHECKS=1; 
2

は、クエリを実行します。 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

私のスニペットコレクションには次のようなものがあります。

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

これは正解です。私は二重の "@@"が必要であることを覚えていません。 – Xeoncross

+0

これは、セッション変数の構文の1つです。「SET SESSION FOO = 1」、「SET @ SESSION.FOO = 1」または「SET @@ FOO = 1」です。 –

関連する問題