具有外键约束的多语句SQL删除

时间:2012-12-16 09:24:52

标签: mysql sql

我正在使用具有外键约束的复杂模式的MySQL 5.5。

我想执行多个updatedelete SQL语句。

执行这些语句的一部分后,可能存在外键约束违规。

执行完所有这些语句后,不应该存在外键约束违规。

我知道cascade,我不想使用它,因为有些更改需要更复杂的逻辑。

我的问题是,有没有办法将我的多个语句组合在一起(作为多语句,事务等),以便在它们全部完成之前不检查外键约束? (如果有错误,那么它们都没有被执行?)

1 个答案:

答案 0 :(得分:1)

MySQL没有实现延迟约束检查。从手册中,

  

偏离SQL标准:与MySQL一样,在SQL中   InnoDB检查,插入,删除或更新许多行的语句   逐行的UNIQUE和FOREIGN KEY约束。表演外国时   密钥检查,InnoDB在子或父上设置共享行级锁   它必须要看的记录。 InnoDB检查外键约束   立即;检查不会延迟到事务提交。   根据SQL标准,应该延迟默认行为   检查。也就是说,只在整个SQL之后检查约束   声明已经处理完毕。直到InnoDB实现延迟   约束检查,有些事情是不可能的,比如删除   使用外键引用自身的记录。

因此,无法仅在一组SQL语句的末尾检查约束。