MySQL学习 | 九、SQL语言中的事物
何进磊 后端攻城狮

一、事物的简介‍‍

1、什么是事物

事物是一组操作的集合,它是一个不可分割的工作单元,事物会把所有的操作作为一个整体一起向系统提交或者撤销操作请求,即这些操作要么全部同时成功,要么同时失败。

MySQL数据库是自动提交事物的。‍‍‍‍


二、事物的操作

1、查看、设置事物的提交方式

SELECT @@AUTOCOMMIT;

SET @@AUTOCOMMIT = 0; (0: 手动提交;1:自动提交)

2、提交事物‍

COMMIT;

3、回滚事物

ROLLBACK;

4、开启事物

START TRANSACTION;
或者
BEGIN;

三、事物的四大特性 ACID‍‍‍

1、原子性(Atomicity):事物是不可分割的最小操作单元,要么全部成功,要么全部失败。‍‍

2、一致性(Consistency):事物完成时,数据的总量保持不变,必须使所有的数据都保持一致的状态。‍

3、隔离性(Isolation):数据库提供的隔离机制,保证事物在不受外部并发操作影响的环境下独立运行(A事物的操作不会影响正在进行的B事物)。

4、持久性(Durability):事物一旦提交或者回滚,他对数据库中的改变都是永久的。


四、并发事物产生的问题

1、脏读:一个事物读取到了另一个事物没提交的数据。‍‍

2、不可重复读:一条事物先后执行同样的SQL,但是两次读取的数据不同(同一行数据每次查询不同)。‍‍‍‍‍

3、幻读:一个事物在执行查询时,每次查询到的数据行数不一致(某一行数据一会存在一会又不存在)。‍


五、事物的隔离级别

隔离界别 脏读 不可重复读 幻读
Read Uncommitted ✔️ ✔️ ✔️
Read Committed ✖️ ✔️ ✔️
Repeatable Read ✖️ ✖️ ✔️
Serializable ✖️ ✖️ ✖️

事物的隔离界别越高,数据越安全,但是性能越低。

查看事物的隔离级别

SELECT @@TRANSACTION_ISOLATION;

设置事物的隔离级别

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZATION };