隐式事务
隐式事务模式,在这种模式中,SQL Server在没有事务存在的情况下会开始一个事务,但不会像在自动模式中那样自动执行COMMIT 或ROLLBACK 语句。隐式事务必须显式结束(既Commit 或者Rollback)。以下语句在没有事务时隐式开始一个事务。
ALTER TABLE |
GRANT |
FETCH |
DELETE |
CREATE |
REVOKE |
INSERT |
SELECT |
DROP |
OPEN |
UPDATE |
TRUNCATE TABLE |
Ø 使用隐式事务
1. 启动SQL Server Management Studio并打开一个“新建查询”窗口。
2. 键入并执行以下语句来设置连接为隐式事务模式(此例的代码包含在示例文件UsingImplicitTransactions.sql中):
SET IMPLICIT_TRANSACTIONS ON;
GO
3. 执行以下代码创建一个表检验是否已启动事务:
CREATE TABLE T1
(i int PRIMARY KEY);
4. 用@@TRANCOUNT来测试是否已经打开一个事务。执行如下所示的SELECT语句:
SELECT @@TRANCOUNT AS [Transaction Count];
5. 结果是1,意思是当前连接已经打开了一个事务。0的意思是当前没有事务,一个大于1的数的意思是有嵌套事务(详见后文)。
6. 现在执行以下语句在表中插入一行并再次检查@@TRANCOUNT:
INSERT INTO T1 VALUES(5);
GO
SELECT @@TRANCOUNT AS [Transaction Count];
@@TRANCOUNT的值仍然是1。由于已经有一个打开的事务,因此SQL Server没有开始一个新的事务。
7. 这个时候必须提交或者回滚事务,不然等到会话结束,表仍然是锁住,因为事务没有提交。现在执行以下语句回滚这个事务并再次检查@@TRANCOUNT。可以看出,在ROLLBACK TRAN 语句执行之后,@@TRANCOUNT 的值变成了0。
ROLLBACK TRAN
GO
SELECT @@TRANCOUNT AS [Transaction Count];
8. 尝试对表T1执行SELECT语句:
SELECT * FROM T1;
9. 由于表不复存在,所以会得到一个错误信息。这个隐式事务起始于CREATE TABLE语句,并且ROLLBACK TRAN语句取消了第一个语句后所做的所有工作。
10. 执行以下代码关闭隐式事务:
SET IMPLICIT_TRANSACTIONS OFF;
警告 在使用隐式事务时要小心。不要忘记提交或回滚工作。由于没有显式的BEGIN TRANSACTION语句,这些步骤很容易被忘记,并导致事务长期运行;在连接关闭时产生的不必要的回滚;以及与其他连接之间产生的阻塞问题。
转自CSDN...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述