我正在使用具有外键约束的复杂模式的MySQL 5.5。
我想执行多个update
和delete
SQL语句。
执行这些语句的一部分后,可能存在外键约束违规。
执行完所有这些语句后,不应该存在外键约束违规。
我知道cascade
,我不想使用它,因为有些更改需要更复杂的逻辑。
我的问题是,有没有办法将我的多个语句组合在一起(作为多语句,事务等),以便在它们全部完成之前不检查外键约束? (如果有错误,那么它们都没有被执行?)
答案 0 :(得分:1)
MySQL没有实现延迟约束检查。从手册中,
偏离SQL标准:与MySQL一样,在SQL中 InnoDB检查,插入,删除或更新许多行的语句 逐行的UNIQUE和FOREIGN KEY约束。表演外国时 密钥检查,InnoDB在子或父上设置共享行级锁 它必须要看的记录。 InnoDB检查外键约束 立即;检查不会延迟到事务提交。 根据SQL标准,应该延迟默认行为 检查。也就是说,只在整个SQL之后检查约束 声明已经处理完毕。直到InnoDB实现延迟 约束检查,有些事情是不可能的,比如删除 使用外键引用自身的记录。
因此,无法仅在一组SQL语句的末尾检查约束。