SQL-92 隔离级别理解和测试
http://tech.ddvip.com 2008年08月26日 社区交流
内容摘要:以前对数据库SQL-92 的隔离级别有所了解,但不知道真正其中的区别。今天就讨论一下这4个隔离级别。
以前对数据库的隔离级别,有所了解,但不知道真正其中的区别。今天就讨论一下这4个隔离级别
下面是4个隔离级别,在SQL server 2005里的介绍:
READ UNCOMMITTED
指定语句可以读取已由其他事务修改但尚未提交的行。
READ COMMITTED
指定语句不能读取已由其他事务修改但尚未提交的数据。这样可以避免脏读。其他事务可以在当前事务的各个语句之间更改数据,从而产生不可重复读取和幻像数据
REPEATABLE READ
其他事务可以插入与当前事务所发出语句的搜索条件相匹配的新行。如果当前事务随后重试执行该语句,它会检索新行,从而产生幻读
SERIALIZABLE
范围锁处于与事务中执行的每个语句的搜索条件相匹配的键值范围之内。这样可以阻止其他事务更新或插入任何行
建立环境:
createtablet_emp(idnumeric(10)
,namevarchar(10),
salarynumeric(10,2));
插入数据:
insertintot_empvalues(1,'jack',10000.50);
insertintot_empvalues(2,'jack2',8000.50);
insertintot_empvalues(3,'jack3',120000);
insertintot_empvalues(4,'jack4',5000);
insertintot_empvalues(5,'jack5',3000);
脏读
如果一个事务在提交操作结果之前,另一个事务可以看到该结果,就会发生这种情况
测试语句一:
SETTRANSACTIONISOLATIONLEVELREADUNCOMMITTED
begintran
select*fromdbo.t_empwhereid=1
测试语句二:
SETTRANSACTIONISOLATIONLEVELREADUNCOMMITTED
begintran
updatet_empsetname='zping.com'whereid=1
这时在两个窗体间执行,在一中可以看到,二中未提交的数据。
不可重复读(也称为模糊读 (Fuzzy Read))
如果一个事务在提交结果之前,另一个事务可以修改和删除它
显示例子:
SETTRANSACTIONISOLATIONLEVELREADCOMMITTED
begintran
select*fromdbo.t_empwhereid=1waitfordelay'00:00:03'
select*fromdbo.t_empwhereid=1
SETTRANSACTIONISOLATIONLEVELREADCOMMITTED
begintran
--1,insertintot_empvalues(1,'33',434)
--2,deletet_empwhereid=1
--3;updatet_empsetname='fff'whereid=1
--4;updatet_empsetid=1whereid=2
commit
一个事务读取数据后,另一个事务修改第一个事务读取当前结果,情况如下:
对应1,增加一条“id=1”的记录。
对应2,将"id=1"的数据记录删除。
对应2,修改结果“id=1"记录其他列的信息。
对应3,修改数据”id=2“的数据为”id=1“的记录。
这时是看不到事务未提交的数据的。
幻像读
如果一个事务在提交查询结果之前,另一个事务可以更改该结果
测试例子:
SETTRANSACTIONISOLATIONLEVELREPEATABLEREAD
begintran
select*fromdbo.t_empwaitfordelay'00:00:03'
select*fromdbo.t_emp
SETTRANSACTIONISOLATIONLEVELREPEATABLEREAD
begintran
insertintot_empvalues(1,'33',434)
commit
先执行1,在执行2
这时:
在事务1执行时,事务2可以增加一条"id=1"的数据,造成幻影读。
作者:zping 责编:豆豆技术应用
- SQL Server 2008 教程
- SQL Server 2005 教程
- SQL Server 安全设置
- SQL Server 故障解决
- SQL Server 安装配置
- SQL Server 备份恢复
- SQL Server 性能调优
- SQL Server 存储过程
- SQL Server 函数
- SQL Server 事务
- SQL Server 查询
- SQL Server 索引
- SQL Server 入门教程
- SQL Server 数据类型
- SQL Server 数据库表
- SQL Server T-SQL
- SQL Server 语句
- SQL Server 死锁
- SQL Server 加密
- SQL Server 数据库连接
- SQL Server 数据仓库
- SQL Server 数据库管理
- 更多SQL Server 专题>>>