回滚点
设置回滚点语法:savepoint 回滚点名字;
回到回滚点语法:rollback to 回滚点名字;
自动事务处理
show variables like 'autocommit';
关闭自动提交:set autocommit=off/0;
事务的四大特性:ACID
A:Atomic,原子性
C:Consistency,一致性
I:Isolation,隔离性
D:Durability,持久性
锁机制
-- 创建一个账户表
create table my_account(
id int primary key auto_increment,
number char(16)not null unique comment '账户',
name varchar(20)not null ,
money decimal(10,2)default 0.0 comment '账户余额'
)charset utf8;
-- 插入数据
insert into my_accountvalues (null,'0000000000000001','张三',1000),(null,'0000000000000002','李四',1000);
-- 张三转账1000元给李四
update my_accountset money=money-1000 where id=1;
-- 事务安全
-- 开启事务
start transaction ;
-- 事务的操作: 李四账户减少
update my_accountset money=money-1000 where id=2;
-- 事务的操作:张三账户增加
update my_accountset money=money+1000 where id=1;
-- 提交事务
commit ;
-- 回滚点操作
-- 开启事务
start transaction ;
-- 事务处理:张三发工资,加钱
update my_accountset money=money+10000 where id=1;
-- 设置回滚点
savepoint sq1;
-- 银行扣税
update my_accountset money=money-10000*0.05 where id=2;
-- 错误
-- 回滚到回滚点
rollback to sq1;
-- 继续操作
update my_accountset money=money-10000*0.05 where id=1;
-- 查看结果
select * from my_account;
-- 提交结果
commit ;
-- 显示系统变量autocommit(模糊查询)
show variables like 'autocommit';
-- 关闭事务自动提交
set autocommit=0;
update my_accountset money=money+11000 where id=2;
commit ;-- 开启事务自动提交
set autocommit =1;
update my_accountset money=money-10000*0.05 where id=2;
-- 开启事务: 隔离性
start transaction ;
-- 给张三返税,反500
update my_accountset money=money+500 where id=1;
start transaction ;
update my_accountset money=money-500 where id=2;
select * from my_account;
select * from my_account;
rollback ;
select * from my_account;
-- 锁机制
start transaction ;
update my_accountset money=money+500 where name='张三';
update my_accountset money=money+500 where id=2;
rollback ;