关于事务和丢失更新

简介:

1.1.1    事务的特性:(面试)

事务四大特性:

  * 原子性(Atomicity)  :强调的事务的不可分割.

  * 一致性(Consistency)    :强调的事务的执行前后,数据库的的完整性保持一致.

  * 隔离性(Isolation)  :强调的事务的并发的访问,一个事务的执行,不应该受到另一个事务的打扰.

  * 持久性(Durability) :强调的事务结束之后,数据就永久的保存的数据库中.

 

如果不考虑事务的隔离性:引发一些安全性问题.

  * 脏读       :一个事务,读到了另一个事务未提交数据.

  * 不可重复读 :一个事务,读到了另一个事务的提交数据(update).导致查询结果不一致.

  * 虚读(幻读) :一个事务,读到了另一个事务的提交数据(insert).导致查询结果不一致

 

数据库中事务的隔离级别:

  * read uncommitted(未提交读) :脏读、不可重复读、虚读都是有可能发生的.

  * read committed(已提交读)   :避免脏读,但是不可重复读和虚读是有可能发生的.

  * repeatable read(重复读)    :避免脏读、不可重复读.但是虚读是有可能发生的.

  * serializable(串行的)       :避免脏读、不可重复读、虚读的发生.

 

  * 安全性:read uncommitted   <  read committed  < repeatable read  < serializable

  * 效率:read uncommitted  > read committed  > repeatable read > serializable

 

  ***** 数据库会比对安全性和效率问题:一般不会采用read uncommitted 和 serializable

  * MYSQL数据库默认的隔离级别:repeatable read

  * Oracle数据库默认的隔离级别:read committed

 

mysql中做一个事务操作,不想被别的事物操作打扰,就只能把隔离级别设置成串行化(serializable).这样就是单线程.速度慢.

oracle中可以把隔离级别设置成自身固有的readonly隔离级别.

这种隔离级别可以查,不可以改.

面试问oracle有几个隔离级别,答案有三个!

自身支持的两个和一个固有的readonly.

关于Oracle支持的隔离级别:

 

 

1.1.2    JDBC中设置事务的隔离级别:

conn.setTransactionIsolation(int level) --- 设置事务的隔离级别.

 

1.1.13   丢失更新(扩展)

解决:

  1.悲观锁:假设丢失更新一定会存在,采用是数据库一种锁机制.(排他锁)

  2.乐观锁:假设丢失更新不一定存在,采用在数据库中添加一个字段完成.

悲观锁解决原理:

乐观锁解决原理:

 

本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/4090919.html,如需转载请自行联系原作者

相关文章
|
7天前
|
消息中间件 存储 缓存
如何在无状态函数中实现事务性操作
如何在无状态函数中实现事务性操作
|
XML Java 数据格式
五、事务操作2
五、事务操作2
66 0
|
XML Java API
五、事务操作1
五、事务操作1
91 0
五、事务操作1
|
关系型数据库 MySQL 数据库
并发事务更新问题
并发事务更新问题
58 0
|
canal 缓存 NoSQL
会不会这是你需要注意的「Redis缓存更新一致性」
会不会这是你需要注意的「Redis缓存更新一致性」
90 0
|
SQL Java 数据库
【事务与并发】- 不同事务读取相同数据问题
在加了事务的接口中,不同的业务或者是出现并发的时候,发现了一些SQL读取问题,两个都被事务包裹的方法,各自是隔离的,如果一方的事务延时提交,就会导致另一方读取出来的数据相同,并不是修改后的数据。
123 0
|
SQL 关系型数据库 MySQL
事务丢失更新问题及乐观锁、悲观锁机制
事务丢失更新问题及乐观锁、悲观锁机制
272 0
事务丢失更新问题及乐观锁、悲观锁机制
Kam
|
Java 测试技术 数据库
线上事务失效及失效场景总结记录
事务注解 @Transactional 失效的3种场景及解决办法
Kam
144 0
|
架构师 关系型数据库 MySQL
事务已提交,数据却丢了,赶紧检查下这个配置!!! | 数据库系列
有个星球水友提问: 沈老师,我们有一次MySQL崩溃,重启后发现有些已经提交的事务对数据的修改丢失了,不是说事务能保证ACID特性么,想问下什么情况下可能导致“事务已经提交,数据却丢失”呢?
661 0
事务已提交,数据却丢了,赶紧检查下这个配置!!! | 数据库系列