事务的隔离级别(zz)

 
SQL语句可以使用SET TRANSACTION ISOLATION LEVEL来设置事务的隔离级别。
   1. Read Uncommitted:最低等级的事务隔离,仅仅保证了读取过程中不会读取到非法数据。上诉4种不确定情况均有可能发生。
   2. Read Committed:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”。该级别适用于大多数系统。
   第一个查询事务
   SET TRANSACTION ISOLATION LEVEL   Read Committed
   begin tran
   update Cate SET Sname=Sname+'b' where ID=1
   SELECT * FROM cate where ID=1
   waitfor delay '00:00:6'  
   rollback tran   --回滚事务
   select Getdate()
   SELECT * FROM cate where ID=1
   第二个查询事务
   SET TRANSACTION ISOLATION LEVEL Read committed   --把committed换成Read uncommitted可看到“脏读取”的示例。
   SELECT * FROM cate where ID=1
   select Getdate()
   可以看到使用 Read Committed 成功的避免了“脏读取”.
   3. Repeatable Read:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。
   第一个查询事务
   SET TRANSACTION ISOLATION LEVEL Repeatable Read --   把Repeatable Read换成Read committed可以看到“不可重复读取”的示例
   begin tran
   SELECT * FROM cate where ID=33 --第一次读取数据
   waitfor delay '00:00:6'  
   SELECT * FROM cate where ID=33 --第二次读取数据,不可重复读取
   commit
   第二个查询事务
   SET TRANSACTION ISOLATION LEVEL Read committed
   update cate set Sname=Sname+'JD' where ID=33
   SELECT * FROM cate where ID>30
   4. Serializable:最高等级的事务隔离,上面3种不确定情况都将被规避。这个级别将模拟事务的串行执行。
   在第一个查询窗口执行
   SET TRANSACTION ISOLATION LEVEL Serializable -- 把Serializable换成Repeatable Read 可看到“幻像读”的示例
   begin tran
   SELECT * FROM cate where ID>30 --第一次读取数据,“幻像读”的示例
   waitfor delay '00:00:6'   --延迟6秒读取
   SELECT * FROM cate where ID>30 --第一次读取数据
   commit
   第二个查询事务
   SET TRANSACTION ISOLATION LEVEL Read committed  
   Delete from cate where ID>33
   SELECT * FROM cate where ID>30  
创建事务

设置事务级别:SET TRANSACTION ISOLATION LEVEL
开始事务:begin tran
提交事务:COMMIT
回滚事务:ROLLBACK
创建事务保存点:SAVE TRANSACTION savepoint_name
回滚到事务点:ROLLBACK TRANSACTION savepoint_name

深圳A8数据分析处理工作室

咨询热线:

137-143-400-99

 地址:深圳市南山区科技园南区软件园 http://www.HiA8.cn

posted on 2008-08-12 10:39  vitamin  阅读(337)  评论(2编辑  收藏  举报