一、定义
用户定义的一系列任务操作,要么全部执行,要么全部不执行。
二、产生
当多用户出现并发访问更改数据库信息时,数据就有可能产生数据不一致的问题导致数据异常,使用事务时保证数一致性的一种方案(不是唯一,还有一使用锁或者设置只读等操作)
三、事务的特征
①原子性:要么执行,要么不执行,不可分割。
②一致性:与原子性息息相关,事务完成时,必须保证所有数据一致的状态。
③隔离性:一个事务的执行不可被其他事务干扰。
④持续性:是指一个事务一旦提交或回滚,它的改变将是永久性的。
四、常用操作
-
查看、设置事务提交方式(mysql默认自动提交@@autocommit = 1)
select @@autocommit;
set @@autocommit = 0;
不设置提交方式开启事务:
start transaction 或 begin -
事务提交
COMMIT; -
事务回滚
ROLLBACK;
五、并发事务问题
- 脏读:一个事务读到另一个事务还没提交的数据。
- 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复性。
- 幻读:一个事务按照条件查询时,没有对应的数据行,但是插入数据时,又发现这行数据已存在,就出现了“幻读”。
六、事务隔离级别(解决并发事务)
隔离级别越高安全性越强但性能越差。
| 隔离级别 | 脏读 | 不可重复度 | 幻读 |
|---|---|---|---|
| Read uncommitted | √ | √ | √ |
| Read committed | √ | √ | |
| Repeatable Read (default) | √ | ||
| Serializable |
1)查看事务隔离级别
select @@transaction_isolation;(mysql8.0.3)
或 SELECT @@tx_isolation;
2)设置事务隔离级别
set [session | global] transaction isolation level {Read uncommitted | Read committed | Repeatable Read | Serializable }
session:当前会话,也就是当前连接。
global:全局,不包含当前连接,之后新获取的连接都会生效。



