事务简介
事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败。
注: MySQL事务机制需要InnoDB的存储引擎
- 事务和锁
当执行事务操作时(dml语句),mysql会在表上加锁,防止其它用户改表的数据。
mysql 数据库控制台事务的几个重要操作
-- 开起事务方式1
start transaction
-- 开起事务方式2
set autocommit=off;
-- 设置保存点
savepoint 保存点名
-- 回退事务
rollback to 保存点名
-- 回退全部事务
roolback
-- 提交事务,所有的操作生效,不能回退
commit
事务隔离级别
介绍
- 多个连接开启各自的事务,操作数据库中的数据时,数据库系统负责隔离操作,以保证各个连接在获取数据时的准确性。
- 如果不考虑隔离性,有可能会出现:脏读、不可重复读、幻读
mysql 事务隔离级别
| Mysql隔离级别 | 脏读 | 不可重复读 | 幻读 | 加锁读 |
|---|---|---|---|---|
| 读未提交(Read uncommitted) | √ | √ | √ | 不加锁 |
| 读已提交(Read committed) | × | √ | √ | 不加锁 |
| 可重复读(Repeatable read) | × | × | × | 不加锁 |
| 可串行(Serializable) | × | × | × | 加锁 |
说明: √ 可能出现,× 不会出现
mysql 事务隔离级别读取
-- 查看当前会话隔离级别
-- 读取事务隔离级别
-- mysql 5.7 及以前
select @@tx_isolation;
-- mysql 8
select @@transaction_isolation;
-- 查看系统当前隔离级别
-- mysql 5.7 及以前
select @@global.tx_isolation;
-- mysql 8
select @@global.transaction_isolation;
mysql 事务隔离级别设置
-- 设置当前会话隔离级别
set session transaction isolation level 隔离级别
-- 设置系统隔离级别
set global transaction isolation level 隔离级别
全局修改,修改my.ini配置文件
[mysqld]
transaction-isolation = 隔离级别