spring声明式事务(二)

来源:互联网 发布:卡卡西实力如何知乎 编辑:程序博客网 时间:2024/06/05 15:50
 

l         ISOLATION_READ_COMMITTED 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。

l         ISOLATION_REPEATABLE_READ 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生 ( 不可重复读 ) 。 在事务 1 中, Mary 读取了自己的工资为 1000, 操作并没有完成 在事务 2 中,这时财务人员修改了 Mary 的工资为 2000, 并提交了事务 . 在事务 1 中, Mary 再次读取自己的工资时,工资变为了 2000 在一个事务中前后两次读取的结果并不致,导致了不可重复读。 使用 ISOLATION_REPEATABLE_READ 可以避免这种情况发生。

l         ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。 目前工资为 1000 的员工有 10 人。 事务 1, 读取所有工资为 1000 的员工。 共读取 10 条记录 这时另一个事务向 employee 表插入了一条员工记录,工资也为 1000 事务 1 再次读取所有工资为 1000 的员工 共读取到了 11 条记录,这就产生了幻像读。 ISOLATION_SERIALIZABLE 能避免这样的情况发生。但是这样也耗费了最大的资源。

原创粉丝点击