数据库事务
1、事务特性
1.1、原子性
- 即不可分割性,事务要么全部被执行,要么就全部不被执行
1.2、一致性
- 事务的执行使得数据库从一种正确状态转换成另一种正确状态
1.3、隔离性
- 在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务
1.4、持久性
- 事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存
2、隔离级别
2.1、读未提交
- 在该隔离级别,所有的事务都可以读取到别的事务中未提交的数据,会产生脏读问题,在项目中基本不怎么用,安全性太差
2.2、读已提交
- 这是大多数数据库默认的隔离级别,但是不是MySQL的默认隔离级别
- 这个隔离级别满足了简单的隔离要求,即一个事务只能看见已经提交事务所做的改变,所以会避免脏读问题
- 由于一个事务可以看到别的事务已经提交的数据,于是随之而来产生了不可重复读和虚读等问题
2.3、可重复读
- 这是MySQL的默认隔离级别,它确保了一个事务中多个实例在并发读取数据的时候会读取到一样的数据
- 不过理论上,这回导致另一个棘手的问题:幻读(Phantom Read),简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现又新的“幻影”行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC, Multiversion Concurrency Control)机制解决了该问题
2.4、可串行化
- 事务的最高级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是再每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争,一般为了提升程序的吞吐量不会采用这个
标签:03,事务,隔离,提交,MySQL,级别,读取 来源: https://www.cnblogs.com/OnlyOnYourself-lzw/p/16701801.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。