SQL SERVER 事务相关

Posted BinBinGo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL SERVER 事务相关相关的知识,希望对你有一定的参考价值。

1 准备数据 及 涉及到的几个设置

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  --设置事务会话的隔离等级(默认值为 READ UNCOMMITTED ),只对当前进程有效(就是说只对打开SSMS当前查询窗口有效,再打开另一个查询窗口就无效了)

SET XACT_ABORT OFF  --设置精确终止(暂且这么叫)开关(默认值为 OFF)   ,只对当前进程有效(就是说只对打开SSMS当前窗口有效,再打开另一个就无效了)

 

IF NOT OBJECT_ID(Score) IS NULL  
DROP TABLE [Score]  
GO  
IF NOT OBJECT_ID(Student) IS NULL  
DROP TABLE [Student]  
GO  
  
CREATE TABLE Student  
(stuid int NOT NULL PRIMARY KEY,  
stuName Nvarchar(20)  
)  
CREATE TABLE Score  
(stuid int NOT NULL REFERENCES Student(stuid),--外键  
scoreValue int  
)  
GO  
  
INSERT INTO Student VALUES (101,胡一刀)  
INSERT INTO Student VALUES (102,袁承志)  
INSERT INTO Student VALUES (103,陈家洛)  
INSERT INTO student VALUES (104,张三丰)  
GO  

2 回滚事例

--最简单回滚
--下面语句可以分开执行,一次执行一行

BEGIN TRAN --开启事务,设置事务开始点
/*
命令已成功完成。
*/

SELECT * FROM score
/*
(0 行受影响)
说明:因为表里没有数据,所以查询返回条数为0.
*/

INSERT INTO score VALUES (101, 59)  --插入数据,此时如果查看消息:(1 行受影响)
/*
(1 行受影响)
*/

SELECT * FROM score
/*
stuid    scoreValue
101      59

(1 行受影响)
说明:本进程内(本查询窗口)可以查到此条已经插入的数据,但是其它进程(查询窗口)是无法查到数据的。因为现在事务并没有提交,SQLSERVER 的默认隔离级别为 READ COMMITTED ,此隔离级别在其它进行中是无法读取到未提交数据的。

*/


ROLLBACK
/*
命令已成功完成。
说明:回滚未提交事务。
*/


SELECT * FROM score
/*
(0 行受影响)
因为已经回滚了,所以查不出数据了。
*/

 

以上是关于SQL SERVER 事务相关的主要内容,如果未能解决你的问题,请参考以下文章

sql server运行中,是不是能删除主数据库事务日志文件

Microsoft SQL Server 代码片段收集

缺少 SQL SERVER 2014 代码片段

SQL Server 分布式事务与本地事务

SQL server中事务的四个属性特征(ACID)

SQL Server 的锁定和阻塞