内容正文:
8
事务与锁
第
章
1
本章导读
事务与锁是SQL Server提供的数据完整性保护机制。事务能够使实现某个功能的所有代码完整地执行,从而保证数据的完整性;锁能够对多个事务的执行进行并发控制,从而保证数据的一致性。
本章将介绍事务与锁的基本概念,以及使用T-SQL命令对它们进行相关操作的方法。
2
知识目标
理解事务与锁的基本概念。
能力目标
能够使用T-SQL创建事务。
能够使用T-SQL加锁。
素质目标
培养逻辑思维能力。
增强自主学习、探究学习的意识。
3
项目导航
事 务
1
锁
2
01
事务
5
8.1.1 初识事务
— 6 —
事务的特征
1
事务的特征有如下4种,它们统称为事务的ACID准则。
(1)原子性(atomicity)。事务是数据库的逻辑工作单位,每个事务都是一个不可分割的整体,事务在执行时对于所有的操作要么都做,要么都不做。
(2)一致性(consistency)。事务执行完成时必须使数据库从一个一致的状态变为另一个一致的状态。
(3)隔离性(isolation)。一个事务的执行不受其他事务干扰,也就是说,一个事务的内部操作及使用的数据对其他并发事务是隔离的。
(4)持久性(durability)。一个事务一旦提交,它对数据库中数据的改变应该是持久的,即使数据库出现故障,也不会丢失提交事务的操作。
事务是数据库系统中执行代码的最小工作单位,它是用户定义的一组操作序列。
6
— 7 —
事务的类型
2
(1)自动提交事务。自动提交事务是数据库引擎的默认模式,每条单独语句都是一个事务,不必指定语句来控制事务。
(2)隐式事务。隐式事务是指使用SET IMPLICIT_TRANSACTIONS ON语句不明显地定义事务开始,使用COMMIT或ROLLBACK语句明显地定义事务结束的事务。
(3)显式事务。显示事务是指使用BEGIN TRANSACTION语句明显地定义事务开始,使用COMMIT或ROLLBACK语句明显地定义事务结束的事务。
8.1.1 初识事务
7
8.1.2 管理事务
— 8 —
管理事务的T-SQL命令有:
BEGIN TRANSACTION,表示开始事务;
COMMIT TRANSACTION,表示提交事务,即将事务中所有对数据库的更新写到磁盘的物理数据库中,事务正常结束;
ROLLBACK TRANSACTION,表示回滚事务,即当事务运行过程中发生了某种故障导致其不能继续执行时,系统会将事务中对数据库所有已完成的操作全部撤销,回滚到事务开始时的状态;
SAVE TRANSACTION,表示保存事务,以便事务回滚时能够撤销到保存点。
知识库
事务与锁的相关操作主要使用T-SQL实现,故本章主要介绍使用T-SQL对它们进行操作的方法。
8
— 9 —
【例 8-1】
在数据库scs中执行事务,向数据表student插入数据,同时限定最多只能插入5条记录。若数据表student中的记录总数不超过5条,显示“插入数据成功!”;反之,则显示“插入数据失败!”,并取消插入操作。
步骤1查询数据表student当前的数据,可见已有5条记录,如图8-1所示。
SELECT * FROM student
图8-1 数据表student的数据
8.1.2 管理事务
9
— 10 —
步骤2执行事务,向已有5条记录的数据表student插入数据,结果如图8-2所示。
BEGIN TRANSACTION
INSERT INTO student VALUES('12004','张三','男','自动化',20)
DECLARE @studentCount INT
SELECT @studentCount = (SELECT COUNT(*) FROM student)
IF @studentCount > 5
BEGIN
ROLLBACK TRANSACTION
PRINT '插入数据失败!'
END
ELSE
BEGIN
COMMIT TRANSACTION
PRINT '插入数据成功!'
END
8.1.2 管理事务
10
— 11 —
图8-2 事务执行结果
这段T-SQL代码中使用BEGIN TRANSACTION定义事务的开始,向数据表student中插入一条数据,同时查询数据表student中的总记录数。
当总记录数大于5时,事务执行失败,使用ROLLBACK TRANSACTION命令撤销所有操作,并显示“插入数据失败!”;
当总记录数不大于5时,事务继续执行,并显示“插入数据成功!”。
8.1.2 管理事务
11
— 12 —
课堂总结
① 初识事务
② 管理事务
12
02
锁
13
8.2.1 初识锁
— 14 —
一般情况