设置隔离级别实现并发控制
来源:互联网 发布:新浪财经数据下载 编辑:程序博客网 时间:2024/06/07 02:35
13.4.4 设置隔离级别实现并发控制
- 摘要:《SQL Server数据库配置与管理指南》第13章事务控制与锁定,本章讲解与事务控制和锁定相关的一些知识,首先讲解了事务的基本概念和特点,然后讲解与事务相关的一些基本操作,最后讲解事务的并发控制和锁定方面的相关知识。本节为大家介绍设置隔离级别实现并发控制。
- 标签:SQL Server 数据库配置 SQL Server数据库配置与管理指南
- Oracle帮您准确洞察各个物流环节
13.4.4 设置隔离级别实现并发控制
使用隔离级别与通过使用锁定选项控制锁定方式具有相同的效果。通常情况下,使用SET TRANSATION语句来设置事务的隔离级别,该语句的语法格式如下:
语句中的level表示可选的可隔离级别,从低到高分为READ UNCOMMITTED、REPEATABLE READ和SERIALIZABLE。
下面讲解READ UNCOMMITTED和REPEATABLE READ隔离级别。
1.READ UNCOMMITTED
READ UNCOMMITTED是限制最小的隔离级别。该选项的作用与在事务内所有语句中的所有表上设置NOLOCK相同。当设置该选项时,在事务结束前可以更改数据值。
下面通过实例讲解READ UNCOMMITTED隔离级别的使用方法。
【实例13-8】本实例实现的是用户U1与U2先后访问"商品信息"数据表,并将事务的隔离级别设置为READ UNCOMMITTED。用户U1实现的代码如代码13.9所示;用户U2实现的代码如代码13.10所示。
代码13.9
代码13.10
【执行代码】首先执行代码13.9,然后执行代码13.10。在U1结束回滚操作之前,U2访问了用户U1正在处理的"商品库存"数据表,因为设置了隔离级别READ UNCOMMITTED,因此出现了读"脏数据"的数据异常。
U1执行以后,输出了U1结束事务之前的数据和结束事务之后的数据,结果如图13.6所示。U2执行以后,读取了用户U1中修改的数据(脏数据),结果如图13.7所示。
【深入学习】关于上述代码的分析如下所示:
第1~2行启动一个事务,在"商品库存"数据表中将事务的隔离级别设置为READ UNCOMMITTED。
第3~6行修改数据表中的数据信息,然后将修改后的数据信息显示出来。
第7~10行在等待15秒之后执行事务回滚的操作,然后将数据表中的数据信息再次显示出来。
第11~13行实现在另一个查询窗口中启动一个事务,在"商品库存"数据表中将事务的隔离级别设置为READ UNCOMMITTED,然后再将数据表中的数据信息显示出来。
说明:若想实现本实例,应首先创建两个不同的查询窗口,然后将代码13.9和代码13.10输入到不同的查询窗口中分别执行,并且两个查询窗口中程序代码的执行间隔不能超过15秒。
2.REPEATABLE READ
使用REPEATABLE READ可以锁定查询中所有的数据,以防止其他用户更改数据。下面通过实例讲解REPEATABLE READ隔离级别的使用方法。
【实例13-9】本实例实现用户U1与U2先后访问"商品库存"数据表,并将事务的隔离级别设置为REPEATABLE READ。用户U1实现的代码如代码13.11所示;用户U2实现的代码如代码13.12所示。
代码13.11
代码13.12
【执行代码】首先执行代码13.11,然后执行代码13.12。在用户U1执行第一个SELECT操作和第二个SELECT操作之前,用户U2向数据表中插入了数据,所以造成了用户U1两次查询结果不一致现象的发生。代码13.11执行后的结果如图13.8所示,代码13.12执行后的结果如图13.9所示。
图13.8 代码13.11的执行结果 图13.9 代码13.12的执行结果【深入学习】关于上述代码的分析如下所示:
第1~2行启动一个事务,在"商品库存"数据表中将事务的隔离级别设置为REPEATABLE READ。
第3~4行查询"商品库存"数据表中的数据信息。
第5~7行实现在等待10秒之后再次查询"商品库存"数据表中的数据信息的操作。
第8行实现执行事务回滚的操作。
第9~13行实现在另一个查询窗口中启动一个事务,在"商品库存"数据表中将事务的隔离级别设置为REPEATABLE READ,然后向数据表中插入一条数据信息,最后将数据表中的数据信息显示出来。
说明:与前面讲解的相关实例一样,在实现本实例时,应首先创建两个不同的查询窗口,然后将代码13.11和代码13.12输入到不同的查询窗口中分别执行,并且两个查询窗口中程序代码的执行间隔不能超过10秒。
- 设置隔离级别实现并发控制
- hibernate之控制并发访问(设置隔离性级别)
- 数据库并发控制和隔离级别
- 事务并发控制、隔离级别及JDBC事务
- hibernate之控制并发访问(ANSI事务隔离性级别)
- hibernate之控制并发访问(选择隔离性级别)
- informix的事务、并发控制、锁机制、隔离级别
- 事务并发控制、隔离级别及JDBC事务
- Informix的事务、并发控制、锁机制、隔离级别
- Informix的事务、并发控制、锁机制、隔离级别
- 详解数据库中的事务、隔离级别、并发控制
- 设置SQLServer的行版本控制隔离级别
- DB2隔离级别设置
- mysql隔离级别设置
- spring隔离级别设置
- 事务并发、事务隔离级别
- 并发性与隔离级别
- 事务并发、事务隔离级别
- (function($){...})(jQuery)是什么…
- bnu 45518
- 数据库事务设置保存点
- Eclipse汉化方法
- 表级锁的使用
- 设置隔离级别实现并发控制
- Linux的防火墙配置
- 解决win7没有找到suite objects.dll 因此rational rose不能能启动 运行Rose 提示错误
- 父窗体与子窗体调用总结
- myeclipse打war包时可能报错的解决…
- session什么时候被创建
- in与exist , not in与not exist 的区别
- MySQL中SYSDATE()和NOW()的区别
- 利用memcached构建高性能的Web应用程序(转)