关于MySQL 事物 总结

什么是事物

事务(Transaction)是数据库区别于文件系统的重要特性之一。 sql

数据库引入事务的主要目的:事务会把数据库从一种抑制状态转换为另外一种一致状态。在数据库提交工做时,这种机制可以保证在一组的sql语句要么都成功执行、要么都不执行。数据库

事务的基本要素(ACID)

事务用来保证数据库的完整性性能

  • 原子性(atomicity):事务中全部操做要么所有成功,要么所有失败
  • 一致性(consistency):从一种状态转变为下一种一致状态。事务开始前和结束后,数据库的完整性约束没有被破坏。
  • 隔离性(isolation):一个事务的影响在提交前对其余事务都不可见
  • 持久性(Durability):一旦提交,结果就是永久性的。

InnoDB中的事务彻底符合ACID的特性atom

数据库事务的隔离级别

数据库事务的隔离级别有4种,由低到高分别是:spa

  • 未提交读(Read uncommitted
  • 已提交读(read committed
  • 可重复读(repeatable read
  • 可串行化(Serializable

image.png

未提交 读(Read uncommitted

容许脏读,就是一个事务能够读取另外一个未提交事务的数据。code

eg:对象

老板要给员工发工资,员工的工资是3000/月。可是发工资时老板不当心按错了数字,按成5000/月,可是该事务尚未提交,就在这时,员工去查看本身这个月的工资,发现(5000)比往常多了2千元,觉得涨工资了很是高兴。

已提交读(read committed

只能读取到已经提交的数据(就是事务要等另外一个事物提交后才能读取数据)
eg:blog

小明拿着工资卡去超市购物(卡里固然是只有3000),当他卖单时(事务开启),收费系统事先检测到他的卡里有3000,就在这个时候!!小明的对象把卡里的钱所有转了出去,并提交事物(提交完成)。当收费系统准备扣款时,再检测卡里的金额,发现已经没钱了。

可重复读(repeatable read

就是在开始读取数据(事物开启)时,再也不容许修改操做。事务

eg:ci

小明拿着工资卡去超市购物(卡里固然是只有3000),当他卖单时(事务开启,不容许其余事务的UPDATE修改操做),收费系统事先检测到他的卡里有3000。这个时候任何人不能转出金额了。接下来收费系统就能够扣款了。

可串行化(Serializable

最高的事务隔离级别,在该级别下,事务串行化顺序执行,读写相互都会阻塞。可是这种事务隔离级别效率低下,比较耗数据库性能,通常不用。

eg:

小明拿着工资卡去ATM机(卡里固然是只有3000),当他取钱时(事务开启),ATM查询到他的卡里有3000。这个时候在向卡里存200。此时 只有当查的事物完成时,存的事物才会执行。

总结

简单来讲: 事物就是在数据库提交工做时,要么全部修改都保存,要么全部修改都不保存。