关于几种并发模型可能造成的副作用的读后感

来源:互联网 发布:南京大学软件学院考研 编辑:程序博客网 时间:2024/04/30 22:02

1:未提交读,这种并发不需要任何锁,而且可以读取别的进程用户修改的但未提交事务的数据。

不会发生丢失更新 因为能读到其他事务的修改结果 第一个:update table set column=column-5

第二个 update table set column=column-5 这个是在第一个的结果上进行修改的  因为能读到第一个的修改结果 所以可以避免丢失更新

 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

2:悲观的已提交读 (系统默认级别) 读的时候不能修改但可以读  读的时候是共享锁 修改的时候不能读 修改的时候是排他锁 但是在一个事务里面 读完后 共享锁自动解除 也就是说这个时候别的事务可以进行修改 当修改完了后 第一个事务再次读取这个时候就出现了 不可重复读的情况

  ALTER DATABASE testcsdn SET READ_COMMITTED_SNAPSHOT OFF

3:乐观的已提交读 什么时候都可以读 但读的是行版本控制器里面最后一次提交的版本 但最近的修改完成后 再次读取读的是最新的数据

因为已提交读 读出的都是完成事务的数据 所以可以避免脏读的情况

  ALTER DATABASE testcsdn SET READ_COMMITTED_SNAPSHOT ON

4:可重复读  是悲观锁模式 可重复读等级比已提交读多了一个约定:所有的共享锁定持续到事务结束,不是在读取完数据就释放这样在一个事务的2次读取内 别的失误是不可能对共享锁控制的数据获得修改权限 所以可以实现可重复读的目的

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

 

5:快照 和乐观的已提交读的区别是 快照在一个事务里面始终使用同样的快照 也就是说在1个事务的2次读取之间 即使有修改了数据的事务发生  这2次读取使用的快照也是一样的 读不到更新的数据 重而读不到 更新(包括修改  删除 插入)

 

ALTER DATABASE TESTCSDN SET ALLOW_SNAPSHOT_ISOLATION ON

 

 

6:可串行化 也叫可序列化 也就是所有的动作 1个个排队去完成  重而避免了所有 的副作用 但也同时大打降低了硬件的利用率

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

原创粉丝点击