事务的操作

回滚点

设置回滚点语法: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 ;

你可能感兴趣的:(事务的操作)