我使用的是具有外键约束的复杂模式的MySQL 5.5。
我想执行多个update和delete SQL语句。
在执行了这些语句的子集之后,可能会出现违反外键约束的情况。
在执行完所有这些语句之后,不应该出现违反外键约束的情况。
我的问题是,有没有一种方法可以将我的多个语句组合在一起(作为多语句、事务等),以便直到所有外键约束都完成后才进行检查?(如果有错误,那么它们都不会被执行?)
发布于 2012-12-16 17:33:58
MySQL不实现延迟约束检查。从手册上看,
与
标准的背离:与通常的MySQL一样,在插入、删除或更新许多行的SQL语句中,InnoDB逐行检查UNIQUE和FOREIGN KEY约束。执行外键检查时,InnoDB会在必须查看的子级或父级记录上设置共享行级锁。InnoDB会立即检查外键约束;检查不会推迟到事务提交。根据SQL标准,默认行为应该是延迟检查。也就是说,只有在处理完整个SQL语句之后才会检查约束。在InnoDB实现延迟约束检查之前,有些事情是不可能的,比如删除使用外键引用自身的记录。
因此,无法仅在一组SQL语句的末尾检查约束。
https://stackoverflow.com/questions/13900007
复制相似问题