MySQL学习笔记(二):InnoDB的事务管理(1)
欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/grfx/253068.html
在MySQL中,Innodb是支持事务的存储引擎,我们先了解一下事务的概念。
事务的概念
事务是逻辑上的中一组操作,这些操作要么同时成功,要么同时失败。
事务的特性(ACID)
●原子性(Atomicity):事务是原子的,不可分割,事务中操作要么同时成功,要么同时失败。
● 一致性(Consistency):事务总是从一个一致性状态到另一个一致性状态。
● 隔离性(Isolation):一个事务不应受其他事务影响。
● 持久性(Durability):事务一旦提交,就应该持久化到数据库,即使数据库发生故障也不应对其产生影响。
用实例来理解事务
我们用最经典的银行转账实例来理解事务。
假如A从账户中转200元到B账户,我们先分解一下步骤,要网站这个转账,我们需要:
1. 检查A中是否有足够的钱(大于等于200元);
2. 扣除A账户200元;
3. B账户增加200元;
4. 转账完成;
我们先设想如果没有事务,一旦出错会怎样。如果在第三步中由于某些原因导致增加钱的操作失败,那么久意味着A账户200元不翼而飞了,对于用户来说这显然是不可接受的。
如果加上事务控制,就不会有这样的问题,在事务中,一组操作要么同时成功,要么同时失败,也就是说,如果在步骤三出现错误,那么步骤二也应该无效(事务会进行回滚),最终A账户不会被扣钱,B账户也不会加钱,转账失败。
我们再来看一下这个实例里体现的事务特性,步骤三失败,步骤二也会失败,体现事务的原子性;转账无论成功还是失败,前后总金额不变,体现了事务的一致性;至于隔离性,这个会受数据库隔离级别的影响(后续会介绍);持久性体现在开启事务的情况下,如果所有步骤都成功完成,一旦该事务提交(未提交不会实际更改数据库),就会持久化到数据库,不受任何影响。
原创作者: 何鑫
尊重原创,人人有责
来源:发布于阿八个人博客,内容来源于网络,如有错误评论区内纠正,学习使人快乐(*^▽^*)