微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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可能会失败.您可能有足够的资源来记录您希望做出的所有更改,但缺少实际实施更改的资源.

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

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

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

原文地址:https://www.jb51.cc/mssql/82908.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐