Taotoken的用量看板与审计日志功能如何助力项目成本管理与安全追溯
2026/5/22 19:52:29
1、概述
2、操作
对上述案例进行讲解
数据:
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);
步骤如下:
# 查询张三的账户余额 select money from account where name='张三'; # 给张三的余额减1000 update account set money=money-1000 where name='张三'; # 给李四的余额加1000 update account set money=money+1000 where name='李四';
在第二个语句之后加上错误(...很关键!!!)
set @@autocommit=1是自动提交,0是手动提交
在提交事务前如果程序出错,会将数据存到当前中缓存,但此时表格的数据没有变化,此时执行回滚事务,可以在当前缓存中消除改变的数据,防止出现,一个人的钱已经减了,但是另一个的还没加
#查看设置提交方式 select @@autocommit; set @@autocommit=0; # 查询张三的账户余额 select money from account where name='张三'; # 给张三的余额减1000 update account set money=money-1000 where name='张三'; 程序出错... # 给李四的余额加1000 update account set money=money+1000 where name='李四'; #提交事务 commit; #回滚事务 rollback ;
一种是设置事务开启的格式,一种就是下图中的开启事务的代码
3、特性
4、并发事务问题
脏读:当事务A在执行更新数据的操作时(但是并没有将数据提交到数据库),事务B读到了未提交的数据
前后两次分别去读的时候,数据发生了变化(同一行的数据发生变化)
读的时候还没有数据,事务B插入并提交,之后事务A要插入的时候又不能插入,然后再去读,发现这个数据依然不存在,但又不能插入
5、事务隔离级别
‘对号’表示会出现这种情况!