Mysql学习笔记——事务

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、事务隔离级别

'对号'表示会出现这种情况!

相关推荐
廋到被风吹走2 小时前
【数据库】【MySQL】各种 JOIN 的特点及应用场景
数据库·mysql
@nengdoudou2 小时前
KingbaseES 实现 MySQL 函数 DATEDIFF
数据库·mysql
charlie1145141912 小时前
现代C++工程实践:简单的IniParser3——改进我们的split
开发语言·c++·笔记·学习
Knight_AL3 小时前
如何在 MySQL 中优雅统计“只算周一到周五”的到访数据?
数据库·mysql
AIHE-TECH3 小时前
多台西门子PLC控制器与SQL数据库对接(带边缘计算)的案例
数据库·sql·mysql·边缘计算·达梦数据库·西门子plc·智能网关
思成不止于此3 小时前
【MySQL 零基础入门】MySQL 函数精讲(二):日期函数与流程控制函数篇
android·数据库·笔记·sql·学习·mysql
知识分享小能手4 小时前
CentOS Stream 9入门学习教程,从入门到精通,CentOS Stream 9 中 Linux C 编程 —语法详解与实战案例(13)
linux·学习·centos
码河漫步4 小时前
win11下mysql数据库设置主从
数据库·mysql
中屹指纹浏览器4 小时前
2025技术干货:国内静态 IP 搭配指纹浏览器的加密绑定与跨区域优化方案
经验分享·笔记