MySQL事务
一、事务的两种操作
1.手动提交事务
语句 | 功能 |
---|
start transaction; 或者 BEGIN; | 开启事务 | commit; | 提交事务 | rollback; | 回滚事务 |
- 手动提交事务流程
2.自动提交事务
- MySQL 默认每一条 DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,语句执行完毕 自动提交事务,MySQL 默认开始自动提交事务
- MySQL默认是自动提交事务
| |
---|
SHOW VARIABLES LIKE ‘autocommit’; | 查看autocommit状态 | SET @@autocommit=off; | 将默认的自动提交事务改为手动提交事务 |
二、事务四大特性
特性 | 含义 |
---|
原子性 | 每个事务都是一个整体,不可再拆分,事务中所有的 SQL 语句要么都执行成功, 要么都失败。 | 一致性 | 事务在执行前数据库的状态与执行后数据库的状态保持一致。 | 隔离性 | 事务与事务之间不应该相互影响,执行时保持隔离的状态. | 持久性 | 一旦事务执行成功,对数据库的修改是持久的。就算关机,数据也是要保存下来的. |
三、事务隔离级别
问题 | 说明 |
---|
脏读 | 一个事务读取到了另一个事务中尚未提交的数据 | 不可重复读 | 一个事务中两次读取的数据内容不一致, 要求的是在一个事务中多次读取时数据是一致的. | 幻读 | 一个事务中,某一次的 select 操作得到的结果所表征的数据状态, 无法支撑后续的业务操作. 查询得到的数据状态不准确,导致幻读. |
- 四种隔离级别(隔离级别越高,效率越低)
- 查看隔离级别:
select @@tx_isolation; - 设置事务隔离级别,需要退出 MySQL 再重新登录才能看到隔离级别的变化
set global transaction isolation level 级别名称;
read uncommitted 读未提交
read committed 读已提交
repeatable read 可重复读
serializable 串行化
|