内容简介:假如你下了一笔订单,会有以下数据库操作:这边的四个操作缺一不可,一旦某一个操作出现异常,则全部操作都需要全部回滚。而事务的作用就是保证在出现异常的情况下能够对操作进行回滚。原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
什么是事务
假如你下了一笔订单,会有以下数据库操作:
1. 生成一笔订单记录 2. 减少库存 3. 从你的账户中减少金额 4. 生成支付记录
这边的四个操作缺一不可,一旦某一个操作出现异常,则全部操作都需要全部回滚。而事务的作用就是保证在出现异常的情况下能够对操作进行回滚。
事务的特性:
原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
事务的隔离级别
脏读
脏读是指在一个事务读取了另一个未提交的事务中的数据。
如: 事务B
对 商品C
的库存进行了修改,但是该事务还未提交。这时候 事务A
读取了 商品C
的库存,后来发现代码有问题,对 事务B
进行了回滚,那么 事务A
读取的就是脏数据了。
一般都是事务的隔离级别保证的就是这个,隔离级别越高效率越低。
不可重复读
不可重复读是指 事务A
在查询过程中, 事务B
修改了数据。第一次和第二次的结果不同。
但这是可以接受的。
幻读
幻读指的是 事务A
在读取过程, 事务B
对添加了一些数据,导致读取的结果长度有了变化。
场景
具体场景
- 如上述所说,一个操作需要有多个操作来完成时需要事务
代码场景
- 一个方法内部,对数据库的写操作超过两条及以上。
分布式事务
假设上述的操作,在四个节点进行操作,普通的事务回滚将不会有效。因为不知道所有的操作是否都成功了。
解决办法一: 事务补偿
以上所述就是小编给大家介绍的《Mysql之事务》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
尽在双11:阿里巴巴技术演进与超越
阿里巴巴集团双11技术团队 / 电子工业出版社 / 2017-4 / 79
“双 11”,诞生于杭州,成长于阿里,风行于互联网,成就于新经济,贡献于全世界。 从 2009 年淘宝商城起,双 11 已历经八年。每年的双 11 既是当年的结束,又是走向未来的起点。技术的突破创新,商业模式的更替交互,推动着双 11 迈步向前。 《尽在双11——阿里巴巴技术演进与超越》是迄今唯一由阿里巴巴集团官方出品、全面阐述双 11 八年以来在技术和商业上演进和创新历程的书籍。内容......一起来看看 《尽在双11:阿里巴巴技术演进与超越》 这本书的介绍吧!