正如在this question中一样,我一直在阅读PoEAA,想知道是否可以将引用完整性检查推迟到MySQL中的提交。
当我想要在同一提交中插入一堆产品和相关产品时,我就遇到了这个问题。即使在事务中,当我尝试插入到related_products连接表中时,也会遇到约束错误。
如果有帮助,我将使用PHP PDO进行数据库连接。
如果你能提供任何帮助,我将不胜感激。
发布于 2011-02-16 17:37:27
看来我的答案是here..。
与MySQL通常一样,在插入、删除或更新许多行的
语句中,InnoDB逐行检查UNIQUE和FOREIGN KEY约束。执行外键检查时,InnoDB会在必须查看的子级或父级记录上设置共享行级锁。InnoDB会立即检查外键约束;检查不会推迟到事务提交。根据SQL标准,默认行为应该是延迟检查。也就是说,只有在处理完整个SQL语句之后才会检查约束。在InnoDB实现延迟约束检查之前,有些事情是不可能的,比如删除使用外键引用自身的记录。
回到绘图板。
发布于 2011-02-16 18:59:14
如果您询问MySQL是否支持外键的DEFERRABLE属性(包括选项INITIALLY DEFERRED),那么答案是明确的否。
在MySQL中,您不能将约束检查推迟到提交时间。
而且-正如你已经指出的-它们总是在“行级”而不是“语句级”进行计算。
发布于 2012-04-30 22:14:05
您可以通过设置服务器变量暂时禁用外键检查来解决innodb引擎的这一限制:
set foreign_key_checks=0;摘自MySQL手册:
mysqldump还会在转储文件中生成正确的表定义,并且不会忘记外键。
为了更容易地重新加载具有外键关系的表的转储文件,mysqldump自动在转储输出中包含一条语句,将foreign_key_checks设置为0。这避免了在重新装载转储时必须以特定顺序重新装载表的问题。也可以手动设置此变量:
mysql> SET foreign_key_checks = 0;
mysql> SOURCE dump_file_name;
mysql> SET foreign_key_checks = 1;https://stackoverflow.com/questions/5014700
复制相似问题