事务
事务
1、保证数据一致性,由一组相关 DML 语句组成,要么全成功,要么全失败
2、执行事务操作时,MySQL 会在表上加锁,防止其他用户修改表的数据
3、基本操作
(1)开始一个事务
START TRANSACTION;
或
BEGIN;
或
SET autocommit=off;
(2)设置保存点
SAVEPOINT 保存点名;
(3)回退事务
ROLLBACK TO 保存点名;
(4)回退所有事务
ROLLBACK;
(5)提交事务
COMMIT;
4、事项
(1)不开始事务,默认 DML 语句自动提交事务
(2)InnoDB 引擎支持 MySQL 事务机制,MyISAM 不支持
(3)执行 COMMIT 后,确认事物变化,结束事务、删除保存点、释放锁、数据生效
(4)COMMIT 结束事务生效后,其他会话(其他连接)可以查看事务变化后的新数据,即所有数据正式生效
5、事务 ACID 特性
(1)原子性:Atomicity,事务中的操作要么全部生效,要么全部失效
(2)一致性:Consistency,事务必须使数据库从一个一致性状态,变换到另一个一致性状态
(3)隔离性:Isolation,多并发事务之间隔离
(4)持久性:Durability,事务一旦提交,改变是永久性的
事务隔离
1、多个连接开启各自事务操作数据库,系统负责隔离,保证各个连接在获取数据时的准确性
2、不隔离的问题
(1)脏写:A 事务修改 B 事务未提交的修改
(2)脏读:A 事务读取 B 事务未提交的修改
(3)不可重复读:A 事务读取两次数据的过程中,B 事务修改数据,导致 A 读取的数据前后不一
(4)幻读:A 事务读取两次数据的过程中,B 事务添加 / 删除数据,导致 A 读取的数据前后不一
3、事务隔离级别:定义事务之间的隔离程度
| MySQL 事务隔离级别 | 脏读 | 不可重复读 | 幻读 | 加锁读 |
| 读未提交:READ UNCOMMITTED | 可能出现 | 可能出现 | 可能出现 | 不加锁 |
| 读已提交:READ COMMITTED | 不会出现 | 可能出现 | 可能出现 | 不加锁 |
| 可重复读:REPEATABLE READ | 不会出现 | 不会出现 | 可能出现 | 不加锁 |
| 可串行化:SERIALIZABLE | 不会出现 | 不会出现 | 不会出现 | 加锁 |
(1)默认 REPEATABLE READ,满足大部分需求
4、相关操作
(1)查看当前会话隔离级别
SELECT @@tx_isolation;
(2)查看系统当前隔离级别
SELECT @@global.tx_isolation;
(3)设置当前会话隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别;
(4)设置系统当前隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别;
5、全局修改
(1)修改 my.ini 配置文件,设置默认的事务隔离级别
transaction-isolation = READ-UNCOMMITTED
transaction-isolation = READ-COMMITTED
transaction-isolation = REPEATABLE-READ
transaction-isolation = SERIALIZABLE
(2)需要重启 MySQL 服务才会生效

浙公网安备 33010602011771号