什么是事务?
首先什么是事务?,我个人的理解就是 我早上去坐公交车,我刷了卡,你就不能让我下车。要么我不刷卡,司机可以让我下车,但是我刷了卡,司机就不能赶我下车。(刷卡->上车) (不刷卡(失败)->不能上车) 两件事要么同时成功,要么同时失败!
学事务我们必须知道ACID(我管这个叫一个条子),为什么呢? 香港皇家警察 就是 叫CID,看过港片的都懂。ACID 分别代表什么呢?带着这疑问我们一一来讲解下.
A——->原子性
C——->一致性
I——–>隔离性
D——->持久性
1.原子性: 这个来源于 物理学,初中物理课本都讲过,原子是不可再分的最小单位(白话:原子表示这已经是最小的单位了,不能再分了),这里我们把事务看做原子,事务里面的操作要么一起成功,要么一起失败,没有其它选择,只要其中一个操作失败了,那么整个事务就会回滚。 就是 要么 我刷卡上车,要么不刷卡 不上车,不能我刷了卡 不让我上车。
//依靠Undo log实现,为了保证事务的原子性,例如在修改数据时,mysql 先将修改之前的数据保存到Undo log中,到发生事务回滚 则从Undo log 中恢复数据。
2.一致性: 指的是数据的一致性,比如,我从支付宝转1000 元 给 张三,一致性表示 我的余额要-1000,张三 余额 + 1000 ,不可能出现我-1000 而张三的余额没有变化,或是我的余额不变化,张三的余额+1000的情况。
//依靠Undo log实现,为了保证事务的原子性,例如在修改数据时,mysql 先将修改之前的数据保存到Undo log中,到发生事务回滚 则从Undo log 中恢复数据。
3.隔离性:比如我在给 张三转 1W元,马云在给他老婆转1个亿,不可能发生 张三收到了1个亿,而马云的老婆收到了1W的情况, 两个事务之间是相互隔离的,数据不可能串。
事务有四种事务隔离级别:
//依靠 mysql 的锁机制实现 事务的隔离
PS:mysql默认的事务处理级别是’REPEATABLE-READ’(不可重复读)
1 | 1.READ UNCOMMITTED ----->session会话A 可以读取到session会话B没有提交的更改数据(该数据可能产生回滚),即产生了脏读 |
4.持久性:只要事务成功了,那么数据一定会保存到数据库,即使在事务成功了,还没有保存成功之前服务器断电了,当服务器重启后,数据库也会从日志文件中恢复数据,
//依靠 Redo log 实现数据的持久性,如上事务成功之前mysql会把新数据 写入Redo log ,断电恢复服务后,mysql会从 Redo log 中读取恢复数据。
我们常用的mysql的Innodb支持事务但是MyiSAM不支持事务。

评论加载中