Игнорировать ограничения внешнего ключа MySQL в PHP - PullRequest
13 голосов
/ 24 ноября 2010

Есть ли способ переопределить ограничения внешнего ключа mysql в php-скрипте?

У меня есть запрос, переданный mysql из php, но он не проходит ограничение внешнего ключа, есть ли способ обойти это без изменения схемы БД?

Я просто провожу некоторое тестирование, поэтому я буду удалять строку, когда я закончу.

Ответы [ 4 ]

19 голосов
/ 24 ноября 2010
mysql_query('SET foreign_key_checks = 0');
//do some stuff here
mysql_query('SET foreign_key_checks = 1');
6 голосов
/ 24 ноября 2010

Вы можете выполнить этот запрос MySQL, чтобы отключить проверку внешних ключей:

SET FOREIGN_KEY_CHECKS=0;

Не забудьте включить его, когда закончите:

SET FOREIGN_KEY_CHECKS=1;
2 голосов
/ 24 ноября 2010

Запустить запрос: 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 голос
/ 24 ноября 2010

У меня есть что-то вроде этого в моей коллекции фрагментов:

SET @BACKUP_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS; 
SET @@FOREIGN_KEY_CHECKS=0;

-- Do stuff here

SET @@FOREIGN_KEY_CHECKS=@BACKUP_FOREIGN_KEY_CHECKS;
SET @BACKUP_FOREIGN_KEY_CHECKS=NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...