【发布时间】:2011-05-15 04:54:53
【问题描述】:
有没有办法在 php 脚本中覆盖 mysql 外键约束?
我有一个从 php 传递给 mysql 的查询,但是它没有通过外键约束,有没有办法在不改变数据库架构的情况下解决这个问题?
我只是在做一些测试,所以我会在完成后删除该行。
【问题讨论】:
标签: php mysql testing foreign-keys
有没有办法在 php 脚本中覆盖 mysql 外键约束?
我有一个从 php 传递给 mysql 的查询,但是它没有通过外键约束,有没有办法在不改变数据库架构的情况下解决这个问题?
我只是在做一些测试,所以我会在完成后删除该行。
【问题讨论】:
标签: php mysql testing foreign-keys
$pdo->query('SET foreign_key_checks = 0');
//do some stuff here
$pdo->query('SET foreign_key_checks = 1');
【讨论】:
我的 sn-p 收藏中有这样的东西:
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;
【讨论】:
SET SESSION FOO=1、SET @@SESSION.FOO=1 或 SET @@FOO=1。
运行查询: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)
【讨论】:
您可以执行该 MySQL 查询来禁用外键检查:
SET FOREIGN_KEY_CHECKS=0;
完成后别忘了启用它:
SET FOREIGN_KEY_CHECKS=1;
【讨论】: