0
点赞
收藏
分享

微信扫一扫

MySQL基础-事务

沈芏 2022-03-23 阅读 62

文章目录

MySQL基础-事务

事务经典案例:张三李四转账

-- ---------------------------- 事务操作 ----------------------------
-- 数据准备
create table account
(
    id    int auto_increment primary key comment '主键ID',
    name  varchar(10) comment '姓名',
    money int comment '余额'
) comment '账户表';
insert into account(id, name, money)
VALUES (null, '张三', 2000),
       (null, '李四', 2000);
-- 恢复数据操作
update account set money = 2000 where name = '张三' or name = '李四';

-- 转账操作
-- 方式一
select @@autocommit;
set @@autocommit = 0;
-- 方式二
start transaction ;

-- 1、查询发送方余额
select * from account where name = '张三';
-- 2、将数据从发送方减出
update account set money = money-1000 where name = '张三';
-- 3、将数据加入接收方
update account set money = money+1000 where name = '李四';

-- 成功:提交事务
commit ;
-- 失败:回滚事务
rollback ;

事务四大特性

1、原子性:事务是不可分割的最小单元,要么全部成功,要么全部失败。

2、一致性:事务完成时,必须使所有事务的数据保持一致的情况。

3、隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

4、持久性:事务一旦提交或者回滚,它对数据库中的数据的改变就是永久的。

并发事务问题

脏读:一个数据读到另一个数据还没有提交的数据。

不可重复读:一个事务先后读去同一条记录,但两次读取的数据不同。

幻读:一个事务按照条件查询数据时,没有对应的数据行,但在插入数据时,又发现该行数据已存在,好像出现了幻影。

-- 事务隔离级别 transaction_isolation
select @@tx_isolation;
-- 改变当前数据隔离级别
set session transaction isolation level read uncommitted ;
set session transaction isolation level repeatable read ;
举报

相关推荐

0 条评论