COMMIT语句(在SQL中)可能会失败吗?怎么样?

在处理数据库事务时,假定事务中的所有语句都已经执行而没有问题,那么可能会导致事务中的最后一个COMMIT语句失败的条件(如果有的话)?

例如,假设你有一些two-phasethree-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而有所不同吗?

解决方法

COMMIT可能会失败.您可能有足够的资源来记录您希望做出的所有更改,但缺少实际实施更改的资源.

这不是考虑其他原因可能会失败:

>更改本身可能不适合数据库的约束.
功率损失阻止事情完成.
>所请求的选择并发级别可能不允许更新(例如,游标更新修改的表).
>提交可能会超时,或者由于饥饿问题而导致超时的连接.
>客户端和数据库间的网络连接可能会丢失.

而所有其他“简单”的原因并不在我头上.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...