SQL 中事务的分类
程序员文章站
2022-09-30 22:54:11
先讲下事务执行流程: BEGIN和COMMIT 结果: ROLLBACK 结果: 由上可知BEGIN TRAN 开始事务,使事务数量加一 COMMIT TRAN 使事务减一,提交最新开辟的事务 ROLLBACK 使事务数量直接减为0,也就是回滚 事务分类: 1.显示事务 2.隐式事务模式 3.自动提 ......
先讲下事务执行流程:
BEGIN和COMMIT
PRINT @@TRANCOUNT --@@TRANCOUNT统计事务数量
BEGIN TRAN PRINT @@TRANCOUNT BEGIN TRAN PRINT @@TRANCOUNT COMMIT TRAN --只提交一个事务 PRINT @@TRANCOUNT COMMIT TRAN PRINT @@TRANCOUNT
结果:
ROLLBACK
PRINT @@TRANCOUNT BEGIN TRAN PRINT @@TRANCOUNT BEGIN TRAN PRINT @@TRANCOUNT ROLLBACK TRAN --回滚所有事务 PRINT @@TRANCOUNT
结果:
由上可知BEGIN TRAN 开始事务,使事务数量加一
COMMIT TRAN 使事务减一,提交最新开辟的事务
ROLLBACK 使事务数量直接减为0,也就是回滚
事务分类:
1.显示事务
2.隐式事务模式
3.自动提交事务
--显示事务
SET NOCOUNT ON SET IMPLICIT_TRANSACTIONS OFF --设置为显示事务模式,也就是自动提交模式 PRINT '显示事务开始前:'+CAST(@@TRANCOUNT AS varchar(10)) GO IF EXISTS(SELECT *FROM sys.tables WHERE name='Table1') DROP TABLE Table1 CREATE TABLE Table1 ( col1 int ) GO INSERT INTO Table1 VALUES(1) PRINT '插入数据时事务数:'+CAST(@@TRANCOUNT AS varchar(10)) BEGIN TRAN PRINT '开始事务时的事务数:'+CAST(@@TRANCOUNT AS varchar(10)) COMMIT TRAN GO PRINT '提交事务后的事务数:'+ CAST(@@TRANCOUNT AS varchar(10)) GO
结果:
--隐式事务模式
SET IMPLICIT_TRANSACTIONS ON --打开隐式事务模式 INSERT INTO Table1 VALUES(2) INSERT INTO Table1 VALUES(2) PRINT '插入数据时事务数:'+CAST(@@TRANCOUNT AS varchar(10)) COMMIT TRAN --如果不显示提交事务,那么如果下一条语句是(INSERT,DELECT,UPDATE,CREATE,TRUNCAST TABLE ,所有DROP,ALTER TABLE,GRINT,REVOK,SELECT)就会自动新建一个事务 PRINT '提交隐式事务后的事务数:'+CAST(@@TRANCOUNT AS varchar(10)) GO
结果:
--自动提交事务
--当设置IMPLICIY_TRANSACTIONS OFF 就恢复为自动提交模式 SET IMPLICIT_TRANSACTIONS OFF GO INSERT INTO Table1 VALUES(3) --没有错误自动提交 PRINT @@TRANCOUNT INSERT INTO Table1 VALUES(3,3) --有错误自动回滚 PRINT @@TRANCOUNT
结果:
--没有错误自动提交
--有错误自动回滚
下一篇: 微软Bing搜索引擎 网站提交
推荐阅读
-
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
-
sql查出一张表中重复的所有记录数据
-
Mybatis中的动态SQL语句解析
-
在sqlserver2005中安装sql server 2000的示例数据库northwind的方法
-
SQL Server 2005 中做全文检索的方法分享
-
sql server 2005中使用with实现递归的方法
-
SQL2005中char nchar varchar nvarchar数据类型的区别和使用环境讲解
-
删除一个表中的重复数据同时保留第一次插入那一条以及sql优化
-
SQL Server中查找包含某个文本的存储过程
-
Mysql 8.0版本导出的sql文件在Mysql 5.5中运行出错