目录
事务控制语言
事务:一个或者一组sql语句组成一个执行单元,
这个执行单元要么全部执行,要么都不执行
事务的特点:
1.原子性:事务是一个不可分割的工作单位
2.一致性:事务必须使数据库从一个状态,转换成另一个一致性状态
3.隔离性:一个事务的执行不能被其他事务干扰
4.持久性:一个事务一旦提交,就是一个永久性的改变
隐式事务:没有明显的开启和结束如delete inserte
显式:事务又明显的开启结束标致,前提:必须先禁用自动提交
SET autocommit=0;只对当前的事务有效
步骤
1.开启事务
SET autocommit=0
2.编写语句(增删改查)
3.结束事务
两种方式
COMMIT 提交
ROLLBACK 回归
案例:转账
- SET autocommit=0;
- START TRANSACTION;#可以写可以不写
- UPDATE ACCOUNT SET balance=500 WHERE username=''
- UPDATE ACCOUNT SET balance=1500 WHERE username=''
-
- COMMIT;
- #rollback;
脏读:1读取了2没有提交的字段,若2回滚则1读取的是临时且无效的数据
不可重复读:1两次读取一个字段结果不一样
幻读:插入字段之前读取
MySQL支持四种隔离级别
/* 脏读 不可重复读 幻读
read uncommitted 1 1 1
read committed 0 1 1
repeatable read 0 0 1
serializable 0 0 0
*/
在MySQL 8.0以上的版本要查看事务隔离级别需要
select @@transaction_isolation;

设置隔离级别为最低
set session transaction isolation level read uncommitted;
选择库然后开始实验

开启一个事务
1.在一个命令窗口设置隔离级别最低,同时修改数据,不提交也不回滚

2.在另一个窗口 开启事务查询表格中所有事务(出现脏读)
