概念:事务是指一个用户定义的数据库操作序列,这个事务要么全部执行要不不执行。
事务特性:ACID
原子性、一致性、隔离性,持久性。
原子性(Atomicity):
是不可分割的最小操作单位,要么同时成功,要么同时失败
一致性(Consistency):
保证数据的状态操作前和操作后保持一致
隔离性(Isolation):
多个事务同时操作相同数据库的同一个数据时,一个事务的执行不受另外一个事务的干扰
持久性(Durability):
当事务提交或回滚后,数据库会持久化的保存数据
事务操作步骤
1. 开启事务
2. 编写事务逻辑操作单元
3. 提交事务或回滚事务
事务分类:
* 隐式事务:没有明显的开启和结束事务的标志
* insert、update、delete语句本身就是一个事务
* 显式事务:具有明显的开启和结束事务的标志
1. 取消自动提交事务:set autocommit=0;
2. 开启事务:start transaction;
3. 提交或回滚事务:
- commit;
- rollback;
事务的隔离级别(面试常考):
* 事务并发问题是如何产生的?
- 当多个事务同时操作同一个数据库的相同数据时
* 事务并发问题
- 脏读:一个事务读取到了另外一个事务未提交的数据
- 不可重复读:同一个事务中,多次读取到的数据不一致
- 幻读:一个事务读取数据时,另外一个事务进行更新,导致第一个事务读取到了没有更新的数据
* 处理事务并发问题,设置事务隔离级别
- READ UNCOMMITTED
- READ COMMITTED:可以避免脏读
- REPEATABLE READ:可以避免脏读、不可重复读和一部分幻读
- SERIALIZABLE:可以避免脏读、不可重复读和幻读
* 注意:隔离级别从小到大安全性越来越高,但是效率越来越低
* 设置隔离级别
- set session|global transaction isolation level 隔离级别名;
* 查看隔离级别
- select @@tx_isolation;