第12章并发控制 本章导读: 为了避免多用户并行存取数据库时,破坏事物的完整性和数据的一致性 sα L Server提供了并发控制机制。并发控制机制主要通过事务隔离级别 封锁机制来调度并发事务的执行,使一个事务的执行不受其它事务的干 知识要点: SQL Server登录 事务处理 并发访问 锁 事物隔离级别 121事务处理 122并发访问 12.3锁 124事务隔离级别
第12章 并发控制 ⚫ 本章导读: ⚫ 为了避免多用户并行存取数据库时,破坏事物的完整性和数据的一致性, SQL Server 提供了并发控制机制。并发控制机制主要通过事务隔离级别 和封锁机制来调度并发事务的执行,使一个事务的执行不受其它事务的干 扰。 ⚫ 知识要点: SQL Server登录 事务处理 并发访问 锁 ⚫ 事物隔离级别 ⚫ 12.1 事务处理 ⚫ 12.2 并发访问 ⚫ 12.3 锁 ⚫ 12.4 事务隔离级别
121事务处理 SQL Server提供了一种事务处理的机制,用于 确保数据的一致性和完整性。在事务处理过程 中,所有操作序列都作为一个独立的逻辑单元 被执行。只有所有操作序列都正确地执行完毕 事物处理才算成功提交,否则就回滚(撤销) 到事物处理前的数据状态。 1211事务概述 12.12事物模式
12.1 事务处理 SQL Server提供了一种事务处理的机制,用于 确保数据的一致性和完整性。在事务处理过程 中,所有操作序列都作为一个独立的逻辑单元 被执行。只有所有操作序列都正确地执行完毕, 事物处理才算成功提交,否则就回滚(撤销) 到事物处理前的数据状态。 12.1.1 事务概述 12.1.2 事物模式
121.1事务概述 事务( Transaction)是一组不可分割的、可执行的动作序列,是数据处理的逻辑单元,其包含的 动作序列具有一定的偏序,即部分关键动作序列的顺序很重要,会影响事物运行结果。事物 是恢复和并发的基本单位 1.事物特性 事务可以是一条或一组SQL语句,也可以是整个应用程序,而一个应用程序也可能包含多个事务 事务有4个特性:原子性( Atomicity)、一致性( Consistency)、隔离性( Isolation)和持 续性( Durability),它们统称为事务的AC|D特性。 (1)原子性:是指事务中操作序列逻辑上作为一个工作单元整体考虑,要么全都执行,要么全 都不执行 (2)一致性:事务在完成时,所有数据必须从一个一致性状态变到另一个一致性状态。在相关 数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所 有的内部数据结构都必须是正确的。 (3)隔离性:是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据 对并发执行的其他事务是隔离的。一个事务能查看到另一个事物的数据状态,要么是修改它 之前的状态,要么是修改它之后的状态,不会是中间状态的数据。 (4)持续性:也称永久性( Permanence),事务完成之后,它对于系统的影响是永久性的,无 论发生何种操作,即使出现系统故障也将一直保持磁盘上
12.1.1 事务概述 事务(Transaction)是一组不可分割的、可执行的动作序列,是数据处理的逻辑单元,其包含的 动作序列具有一定的偏序,即部分关键动作序列的顺序很重要,会影响事物运行结果。事物 是恢复和并发的基本单位。 1.事物特性 事务可以是一条或一组SQL语句,也可以是整个应用程序,而一个应用程序也可能包含多个事务。 事务有4个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持 续性(Durability),它们统称为事务的ACID特性。 (1)原子性:是指事务中操作序列逻辑上作为一个工作单元整体考虑,要么全都执行,要么全 都不执行。 (2)一致性:事务在完成时,所有数据必须从一个一致性状态变到另一个一致性状态。在相关 数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所 有的内部数据结构都必须是正确的。 (3)隔离性:是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据 对并发执行的其他事务是隔离的。一个事务能查看到另一个事物的数据状态,要么是修改它 之前的状态,要么是修改它之后的状态,不会是中间状态的数据。 (4)持续性:也称永久性(Permanence),事务完成之后,它对于系统的影响是永久性的,无 论发生何种操作,即使出现系统故障也将一直保持磁盘上
121.1事务概述 2.事物和批的区别 个事务中也可以拥有多个批,一个批里可以有多个 SQL语句组成的事务,事务内批的多少不影响事务的 提交或回滚操作。编写应用程序时,一定要区分事务 和批的差别: (1)批是一组整体编译的SQL语句,事务是一组作为逻 辑工作单元执行的SQL语句。 (2)批语句的组合发生在编译时刻,事务中语句的组合 发生在执行时刻。 (3)编译时,批中某条语句存在语法错误,系统将终止 批中所有语句;运行时,事务中某个数据修改违反约 束、规则等,系统默认只回退到产生该错误的语句
12.1.1 事务概述 2.事物和批的区别 一个事务中也可以拥有多个批,一个批里可以有多个 SQL语句组成的事务,事务内批的多少不影响事务的 提交或回滚操作。编写应用程序时,一定要区分事务 和批的差别: (1)批是一组整体编译的SQL语句,事务是一组作为逻 辑工作单元执行的SQL语句。 (2)批语句的组合发生在编译时刻,事务中语句的组合 发生在执行时刻。 (3)编译时,批中某条语句存在语法错误,系统将终止 批中所有语句;运行时,事务中某个数据修改违反约 束、规则等,系统默认只回退到产生该错误的语句
1212事物模式 SQL Server中的事务模式包括3种工作方式:自动提交事务、显式 事务和隐式事务 1.自动提交事务 自动提交事务是由TSQL语句的特点自动划分的事务。它是SQL Server的默认模式,每条单独的T-SQL语句都是一个事务,自动 提交或回滚,无须指定任何控制语句控制事务。 2.显式事务 显式事务是由用户显式定义的事务。在显式事各模式下,每个事物 均以 begin transaction语句定义事务开始,角 commit或 rollback 语句定义事务结束。主要事物控制语句如下 (1) begin transaction[事务名]:启动事务 (2) commit transaction[事务名]:提交事务,提交的数据变成数 据库的永久部分; (3) rollback transaction 「事务名:回滚事务,撤销全部操作,回 滚到事务开始时状态; (4) save transaction 事务名>:可选语句,在事务内设置保存点, 可以使事物回滚到保存点,而不是回滚到事务的起点
12.1.2 事物模式 SQL Server中的事务模式包括3种工作方式:自动提交事务、显式 事务和隐式事务。 1.自动提交事务 自动提交事务是由T-SQL语句的特点自动划分的事务。它是SQL Server 的默认模式,每条单独的T-SQL语句都是一个事务,自动 提交或回滚,无须指定任何控制语句控制事务。 2.显式事务 显式事务是由用户显式定义的事务。在显式事务模式下,每个事物 均以begin transaction 语句定义事务开始,用commit或 rollback 语句定义事务结束。主要事物控制语句如下: (1)begin transaction [事务名]:启动事务; (2)commit transaction [事务名]:提交事务,提交的数据变成数 据库的永久部分; (3)rollback transaction [事务名]:回滚事务,撤销全部操作,回 滚到事务开始时状态; (4)save transaction :可选语句,在事务内设置保存点, 可以使事物回滚到保存点,而不是回滚到事务的起点
1212事物模式 【例12-1】定义一个事务,向学生表中插入一条只包含学号、姓名和性别的记录。 use xg select次数=0,*from学生 检查当前表的内容 begin transaction insert into学生(学号,姓名,性别 )values(11010101,司武长男) save transaction label insert into学生(学号姓名,性别)yaue(11010101那佳佳女) select次数=1,*from学生 显示插入两条记录 rollback transaction label 回滚到事物保存点 select次数=2,*from学生 显示第1次插入的记录被撤销了 g rollback transaction select次数=3*fom学生 显示第2次插入的记录被撤销了
12.1.2 事物模式 【例12-1】定义一个事务,向学生表中插入一条只包含学号、姓名和性别的记录。 use jxgl go select 次数=0,* from 学生 --检查当前表的内容 go begin transaction insert into 学生(学号,姓名,性别)values('11010101','司武长','男') go save transaction label insert into 学生(学号,姓名,性别)values('11010101','那佳佳','女') select 次数=1,* from 学生 --显示插入两条记录 rollback transaction label --回滚到事物保存点 select 次数=2,* from 学生 --显示第1次插入的记录被撤销了 go rollback transaction select 次数=3,* from 学生 --显示第2次插入的记录被撤销了
1212事物模式 3.隐式事务 隐式事务是用 set implicit transactions on不明显地定义 事务开始,用 commit或ro‖back语句明显地定义事务 结束的事务。在隐式事务模式下,在当前事务提交或 回滚后, SQL Server自动开始下一个事务。主要事物 模式设置语句如下: (1)设置隐性事务开始模式: set implicit transactions on:启动隐性事务模式; set implicit transactions off:关闭隐性事务模式。 (2)设置隐性事务回滚模式: set xact abort on:当事务中任一条语句运行错误时, 整个事务将终止并整体回滚 set xact abort off:当事务中语句运行错误时,将终止 本条语句且只回滚本条语句
12.1.2 事物模式 3.隐式事务 隐式事务是用set implicit transactions on不明显地定义 事务开始,用commit或rollback语句明显地定义事务 结束的事务。在隐式事务模式下,在当前事务提交或 回滚后,SQL Server 自动开始下一个事务。主要事物 模式设置语句如下: (1)设置隐性事务开始模式: set implicit_transactions on:启动隐性事务模式; set implicit_transactions off:关闭隐性事务模式。 (2)设置隐性事务回滚模式: set xact_abort on:当事务中任一条语句运行错误时, 整个事务将终止并整体回滚; set xact_abort off:当事务中语句运行错误时,将终止 本条语句且只回滚本条语句
122并发访问 数据库是允许多用户同时使用的共享资源,当多 个事务并发访问(同时访问同一资源)时,若 不加控制就可能会彼此冲突,破坏了数据的完 整性和一致性,从而产生负面影响。 122.1并发概述 1222并发异常 1223并发调度
12.2 并发访问 数据库是允许多用户同时使用的共享资源,当多 个事务并发访问(同时访问同一资源)时,若 不加控制就可能会彼此冲突,破坏了数据的完 整性和一致性,从而产生负面影响。 12.2.1 并发概述 12.2.2 并发异常 12.2.3 并发调度
1221并发概述 如果事物是顺序执行的,即一个事物完成之后, 再开始另一个是事物,则称这种执行方式为串 行执行,如图12-1a所示;如果数据库管理系 统可以同时接收多个事物,并且这些事物在时 间上可以重叠执行,则称这种执行方式为并行 执行。在单CPU系统中,同一时间只能有一个 事物占据CPU。各事物交叉地使用CPU,这 种并发方式交叉并发。在多CPU系统中,多个 事物可以同时占据CPU,这种并发方式称为同 时并发,如图12-1b所示。在没有特殊说明的 情况下,并发访问只考虑单CPU系统中的交叉 并发的情况
12.2.1 并发概述 如果事物是顺序执行的,即一个事物完成之后, 再开始另一个是事物,则称这种执行方式为串 行执行,如图12-1a所示;如果数据库管理系 统可以同时接收多个事物,并且这些事物在时 间上可以重叠执行,则称这种执行方式为并行 执行。在单CPU系统中,同一时间只能有一个 事物占据CPU。各事物交叉地使用CPU,这 种并发方式交叉并发。在多CPU系统中,多个 事物可以同时占据CPU,这种并发方式称为同 时并发,如图12-1b所示。在没有特殊说明的 情况下,并发访问只考虑单CPU系统中的交叉 并发的情况
1221并发概述 时间 间T1T2T3 T2 a)串行执行 b)交叉并行执行 图12-1多个事物的执行情况
12.2.1 并发概述 a)串行执行 b)交叉并行执行 图12-1 多个事物的执行情况