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 事务相关的主要内容,如果未能解决你的问题,请参考以下文章