事务即细节
# 事务
CREATE TABLE t27
(id INT,
`name` VARCHAR(32));
-- 开始事务
START TRANSACTION
-- 设置保存点
SAVEPOINT a
-- 执行dml操作
INSERT INTO t27 VALUES(100,'tom')
SELECT * FROM t27;
-- 设置保存点
SAVEPOINT b
INSERT INTO t27 VALUES(200,'jack')
-- 回退到b
ROLLBACK TO b
-- 继续回退到a
ROLLBACK TO a
-- 不写保存点就是回退所有
ROLLBACK
-- 如果commit了,就不能回退ab了,而且ab会被删除
COMMIT
-- 事务细节
-- 不开始事务自动提交,不能回滚
INSERT INTO t27 VALUES(300,'milan'); -- 自动commit
SELECT * FROM t27;
-- 如果开始一个事务但是没有保存点,可以rollback,回退到开始的状态
START TRANSACTION
INSERT INTO t27 VALUES(400,'milan');
ROLLBACK -- 回滚到只有300
-- 开始事务
START TRANSACTION -- 或者写 set autocommit = off
事务隔离级别
# 事务隔离级别
-- 开两个mysql控制台
-- 查看当前MySQL隔离级别
SELECT @@tx_isolation; -- REPEATABLE-READ
-- 设置当前会话隔离级别 READ UNCOMMITTED
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
-- 查看系统当前隔离级别
SELECT @@global.tx_isolation; -- REPEATABLE-READ
-- 设置系统当前隔离级别 READ UNCOMMITTED
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
-- 脏读就是别人未提交的数据但可以查到
-- 不可重复读和幻读意思就是,假如你在使用数据集之前查询数据集只有一条数据
-- 你就按照一条数据的情况去做后续处理
-- 但由于别人对此数据集的操作,导致你后面再次查询数据集时候发生了改变
-- 也就是每次返回了不同的结果集
-- 加锁,就是当A操作但没有提交时,B操作时会卡住,等待A操作结束才能让B操作