使用 MariaDB,我在一个表上运行插入,然后尝试在第二个表上运行另一个插入。由于限制,只有第一次插入成功后,第二次插入才会成功。
如果我尝试在一个事务中执行两次插入,则第二次插入会失败并出现完整性错误。如果我提交第一个插入,则第二个插入成功。
我假设在单个事务中可以进行两次插入是否正确?
我看到的实际情况稍微复杂一些:有两个没有约束的插入,第三个有约束,只有前两个插入成功时才会成功。第三次插入使用前两个表的主键元组作为其主键。
使用 MariaDB,我在一个表上运行插入,然后尝试在第二个表上运行另一个插入。由于限制,只有第一次插入成功后,第二次插入才会成功。
如果我尝试在一个事务中执行两次插入,则第二次插入会失败并出现完整性错误。如果我提交第一个插入,则第二个插入成功。
我假设在单个事务中可以进行两次插入是否正确?
我看到的实际情况稍微复杂一些:有两个没有约束的插入,第三个有约束,只有前两个插入成功时才会成功。第三次插入使用前两个表的主键元组作为其主键。
解决方案是插入
FLUSH
而不是COMMIT
插入之后。这样,会话就可以获得满足约束所需的信息,并且第三次插入会成功。然后可以提交整个事务。但是,如果发生异常,则可以回滚任何成功的插入。