mysql事务详解

事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。ACID 四大特性,原子性、隔离性、一致性、持久性。

 

锁是 为了解决 并发事务中 资源争夺 带来的安全问题 而提出 的概念。(锁是本质就是将并发过来的请 求 转成串行执行)

事务 需要保证 原子性,隔离性,一致性,持久性一个或多个称之为 事务。

原子性: 银行转账,只要2种 情况!(事务要吗成功 要不失败 ,没有中间状态)

隔离性: 两个事务 应该相互感受不到 对面的存在!2个事务应该是串行,而不是并行,串行执行( 要不是前者先执行,要不是后者先执行)。

一致性:我们前边唠叨的原子性和隔离性都会对一致性产生影响,比如我们现实世界中转账操作完成后,有一个一致性需求就是参与转账的账户的总的余额是不变的。如果数据库不遵循原子性要求,也就是转了一半就不转了,也就是说给狗哥扣了钱而没给猫爷转过去,那最后就是不符合一致性需求的;类似的,如果数据库不遵循隔离性要求,就像我们前边唠叨隔离性时举的例子中所说的,最终狗哥账户中扣的钱和猫爷账户中涨的钱可能就不一样了,也就是说不符合一致性需求了。所以说,数据库某些操作的原子性和隔离性都是保证一致性的一种手段,在操作执行完成后保证符合所有既定的约束则是一种结果。那满足原子性和隔离性的操作一定就满足一致性么?那倒也不一定,比如说狗哥要转账20元给猫爷,虽然在满足原子性和隔离性,但转账完成了之后狗哥的账户的余额就成负的了,这显然是不满足一致性的。那不满足原子性和隔离性的操作就一定不满足一致性么?这也不一定,只要最后的结果符合所有现实世界中的约束,那么就是符合一致性的。

持久性:数据一致。

参考:https://juejin.cn/book/6844733769996304392/section/6844733770063609869

posted @ 2021-03-11 15:34  这该死的代码  阅读(402)  评论(0)    收藏  举报