一个事务就是一个完整的业务逻辑,是一个最小的工作单元,不可再分
事务就是一组sql语句,这组sql语句要么都完成,要么都没完成
1.事务的原则;ACID(原子性Atom,一致性Consist,隔离性Isolation,持久性Durability)
(1)原子性:事务就是一组sql语句,这组sql语句要么都完成,要么都没完成
(2)一致性:事务执行前和执行后,数据要保持一致
以转账为例,没转帐前A,B加起来一共有1200元,不管你们两个人怎么转账,两个人的钱加起来永远还是1200
(3)持久性:事务被提交之后,对数据库中数据的改变是持久的,即使数据库发生什么障碍,数据也不会再变化
事务没有提交(没有结束),就恢复到原状
事务提交了(结束了)则持久化到数据库了
(4)隔离性:多个事务同时在执行,事务与事务之间互不影响,即排除其他事务对本事务的影响
比如下面A在给B转账,C也在给B转账
只有保证了事务的持久性,原子性,隔离性,一致性才能得到保障
即A,I,D是手段,C是目的
ACID 靠什么保证的呢?
A原子性由 undo log 日志回滚日志保证,它记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql
I隔离性由MVCC或者锁机制来保证
D持久性由redo log重做日志来保证,mysql修改数据同时在内存和redo log记录这次操作,事务提交的时候通过redo log刷盘,宕机的时候可以从redo log恢复
一致性则是通过持久性+原子性+隔离性来保证
其实事务主要是为了实现 C ,也就是一致性,具体是通过AID,即原子性、隔离性和持久性来达到一致性的目的,所以这四个不应该相提并论,但是外国人就想拼成单词Acid(酸),就把它们排好序搞在一起来念
2.事务的隔离级别参考下面这篇博客
1分钟四个举例超清晰理解事务的四个隔离级别_Pr Young的博客-CSDN博客_事务隔离级别 例子
3.事务的自动提交机制
mysql默认开启事务的自动提交,也就是每执行一条sql语句就提交一次
开启和关闭mysql的自动提交事务机制:
- set autocommit=0 关闭自动提交
-
- set autocommit=1 开启自动提交
4.手动开启事务和手动关闭事务:
- set autocommit=0 //关闭自动提交事务
-
- start transaction;//开启事务
-
-
- sql语句1;
- sql语句2;
- sql语句3;
-
-
- commit;//提交事务
-
- set autocommit=1 //开启自动提交
5.回滚rollback:回滚只能回到上一次的提交点
只有保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障。也就是说 A、I、D 是手段,C 是目的!