sql语句中begin tran...commit tran...rollback tran
2021/8/2 2:05:55
本文主要是介绍sql语句中begin tran...commit tran...rollback tran,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Sql Server 2005/2008中提供了begin tran,commit tran和rollback tran来使用事务。begin tran表示开始事务, commit tran表示提交事务,rollback tran表示回滚事物
用途:
一般把DML语句(delete,update,insert语句)放在BEGIN TRAN...COMMIT TRAN 之间作为一个事务处理
也就是那些语句执行过程中如果遇到错误,无论哪句遇到错误,所有语句都会回滚到BEGIN TRAN之前的状态。
例如你需要更新一个数据,但是这个数据存在于两个表内,你需要用两个update语句。如果第一个执行成功,第二个由于某种原因执行失败,将导致这个数据的不一致。数据库的数据就出错了。
如果想要避免,就用BEGIN TRAN...COMMIT TRAN ,把这两个update写在中间,如果发生如上的事情,第一个update的数据,将被退回,即没有被更新。你收到错误信息,就知道更新完全没有进行,不需要考虑部分更新的情况。
如果仅仅是查询就不需要这个。
eg:
新建两个连接
在第一个连接中执行以下语句
begin tran
update table1
set A='aa'
where B='b2'
waitfor delay '00:00:30' --等待30秒
commit tran
在第二个连接中执行以下语句
begin tran
select * from table1
where B='b2'
commit tran
若同时执行上述两个语句,则select查询必须等待update执行完毕才能执行即要等待30秒
--------------------------------------------------------------------------------------------------------------
问题1:当第一个连接执行完update的时候。这个时候表table1的a字段的值变成'aa'了吗?
答:此时还没有真正写入表。
问题2:第一个事务中,延迟30秒,是不是在这30秒内一直保持对table1表的更新状态?这个时候别的事务就不能进行修改了?
是这样子吗?第二个连接只有在第一个连接事务结束后才能执行select语句?
答:只是在等待。更新已经做完,但还没有提交。别的事务不能修改。
问题3:还有不知道这上面的代码跟排它锁有什么关系?默认排它锁?
答:事务中会自动加锁。update 会加上TX锁。
这篇关于sql语句中begin tran...commit tran...rollback tran的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么切换 Git 项目的远程仓库地址?-icode9专业技术文章分享
- 2024-12-24怎么更改 Git 远程仓库的名称?-icode9专业技术文章分享
- 2024-12-24更改 Git 本地分支关联的远程分支是什么命令?-icode9专业技术文章分享
- 2024-12-24uniapp 连接之后会被立马断开是什么原因?-icode9专业技术文章分享
- 2024-12-24cdn 路径可以指定规则映射吗?-icode9专业技术文章分享
- 2024-12-24CAP:Serverless?+AI?让应用开发更简单
- 2024-12-23新能源车企如何通过CRM工具优化客户关系管理,增强客户忠诚度与品牌影响力
- 2024-12-23原创tauri2.1+vite6.0+rust+arco客户端os平台系统|tauri2+rust桌面os管理
- 2024-12-23DevExpress 怎么实现右键菜单(Context Menu)显示中文?-icode9专业技术文章分享
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享