事务
基本介绍
-
什么是事务
事务用于保证数据的一致性,它由一组相关的DML语句组成,该组的DML语句要么全部成功,要么全部失败。
-
事务和锁
当执行事务操作时(DML操作),MySQL会在表上加锁,防止其他用户更改表的数据。
-
几个重要操作
- start transaction – 开始一个事务
- savepoint 保存点名 – 设置保存点
- rollback to 保存点名 – 回退事务
- rollback – 回退全部事务
- commit – 提交事务,所有的操作生效,不能回退
MySQL事务的隔离级别
介绍
- 多个连接开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据库时的准确性。
- 如果不考虑隔离性,可能会引发如下问题
- 脏读(dirty read)
- 不可重复读(nonrepeatable read)
- 幻读(phantom read)
- MySQL隔离级别定义了事务与事务之间的隔离程度。
MySQL隔离级别 | 脏读 | 不可重复读 | 幻读 | 加锁读 |
---|---|---|---|---|
读未提交(Read uncommitted) | √ | √ | √ | 不加锁 |
读已提交(Read committed) | × | √ | √ | 不加锁 |
可重复读(Repeatable read) | × | × | × | 不加锁 |
可串行化(Serializable) | × | × | × | 加锁 |
设置隔离
-
查看当前会话隔离级别
SELECT @@tx_isolation
-
查看系统当前隔离级别
SELECT @@global. tx_isolation
-
设置当前会话隔离级别
set session transaction isolation level [需要设置的级别]
-
设置系统当前隔离级别
set global transaction isolation level [需要设置的级别]
-
MySQL默认的事务隔离级别是repeatable read,一般情况下,没有特殊要求,没有必要修改(该级别可以满足大部分项目需求)。