作者:Irain
QQ:2573396010
微信:18802080892
Github文件:18 TCL 事务控制语言 和事务并发 -
视频链接:TCL 事务控制语言和事务并发 -
软件环境:MySQL Front
一、TCL 事务控制语言
1 事务 Transaction Control Language
含义:一个或一组sql语句注册一个执行单元,这个执行单元要么全部执行,要么全部不执行
特性:原子性、一致性、隔离性、持久性(ACID)
2 事务的创建
隐式事务:事务没有明显的开启和结束的标记
比如:insert、update、delete语句
显式事务:事务有明显的开启和结束的标记
前提:必须先设置自动提交功能为禁用
set autocommit = 0; # 关闭自动提交,当前会话有效
显式事务步骤:
步骤1:set autocommit = 0; 或 start transaction;可选
步骤2:编写事务中的sql语句(select、inset、update、delete)
步骤3:结束事务。commit:提交事务; rollback:回滚事务。
# 创建表
drop table if exists tab;
create table if not exists tab(
id int,
varname varchar(10)
);
2.1 成功提交事务
set autocommit = 0;
start transaction;
insert into tab values(1,'aa');# 编写一组事务的语句
insert into tab values(2,'bb');
commit; # 结束事务
select * from tab;
2.2 回滚事务
set autocommit = 0;
start transaction;
insert into tab values(3,'cc');# 编写一组事务的语句
insert into tab values(4,'dd');
rollback; # 回滚事务
select * from tab;
2.3 savepoint与rollback搭配
select * from tab;
set autocommit=0;
start transaction; # 开启事务
delete from tab where id=3; # 成功删除id=3的数据
savepoint id1; # rollback回滚到位置,仍然执行删除id=3数据的指令
delete from tab where id=4; # 因为rollback回滚,没有删除id=4的数据
rollback to id1; # 回滚到savepoint节点位置。rollback与savepoint之间的执行无效
select * from tab;
2.4 delete与truncate在事务的作用
2.4.1 delete删除操作,无效
set autocommit=0;
start transaction; # 开启事务
delete from tab;
rollback;
select * from tab;
2.4.2 truncate删除操作,有效
set autocommit=0;
start transaction; # 开启事务
truncate table tab;
rollback;
select * from tab;
二、事务并发
1 事务并发问题介绍
2 事务的隔离级别演示
2.1 查看当前事务的隔离级别
2.2 设置当前事务隔离级别为read uncommitted,出现脏数据、不可重复读、幻读的并发问题
2.3 事务隔离级别read committed,出现不可重复读、幻读的并发问题
2.3 事务隔离级别repeatable read ,出现幻读的并发问题
插入/删除操作会出现幻读
2.4 事务隔离级别:serializable、最高级别,避免所有并发问题
发布:2020年4月28日