在处理数据库事务时,假定事务中的所有语句都已经执行而没有问题,那么可能会导致事务中的最后一个COMMIT语句失败的条件(如果有的话)?
例如,假设你有一些two-phase或three-phase commit protocol你做了一堆语句,然后等待一些主进程告诉你什么时候可以最后提交事务:
-- <initial handshaking stuff> START TRANSACTION; -- <Execute a bunch of sql statements> -- <Inform master of readiness to commit> -- <Time passes... background transactions happening while we wait> -- <Receive approval to commit from master (finally!)> COMMIT;
如果您的代码到达最终的COMMIT语句并将其发送到您的DBMS,您是否可以在该语句中收到错误(唯一性问题,数据库已满等)?有什么错误?为什么?它们如何出现?它根据您运行的DBMS而有所不同吗?