事务操作语句

操作语句

开启事务

begin;#声明新事务

start transaction;#声明新事务

提交事务

commit;#提交当前事务

commit work;#提交当前事务

提交事务,对数据库进行所有修改都将变为永久性的

回滚

rollback;#回滚当前事务

rollback work;#回滚当前事务

savepoint s1;#在事务内设标记点s1,作用为分段回滚

rollback to savepoint s1;#将事务回滚到事务中的某个标记点

开启或者关闭自动提交

set autocommit=1;#开启自动提交,mysql默认为1

set autocommit=0;#关闭自动提交

show variables like 'autocommit';#查看mysql当前commit值

如果没有开启自动提交,那么当前会话连接的mysql所有操作都会在你输入rollback(回滚)或者commit(提交事务)时,才算事务结束。当前事务结束前新的mysql连接时无法读取到任何会话的操作结果。

如果开启了自动提交,那么mysql会将每一个sql语句都当做一个独立的事务,即msyql会帮助你在每一个sql语句后打出commit。

模拟实现多用户

复制代码
use 数据库
show session variables like '%isolation%';
create table account (name varchar(32),id int primary key, age int ,money float);
INSERT into account VALUE("张三",1,20,1000);
INSERT into account VALUE("李四",2,30,2000);
INSERT into account VALUE("王五",3,40,3000);
INSERT into account VALUE("李六",4,50,4000);



#使用远程连接工具在开用户b

set session transaction isolation level Read Uncommitted;#设置读未提交
show session variables like '%isolation%';#查看设置

脏读

##a操作

复制代码
begin;
update account set money=money/20 where id=2;
##不提交

##b操作

复制代码
select * from account;

得到结果:

不可重复读

##a操作

复制代码
begin;
select * from account;
##b操作结束后a:
select * from account where id=2;

##b操作

复制代码
update account set money=money*100 where id=2;

得到结果:

幻读

##a操作

复制代码
begin;
update account set age=30;
##b操作结束后a:
select * from account;

##b操作

复制代码
begin;
insert account value ('dz',5,15,15);

得到结果:

丢失更新

##a操作

复制代码
BEGIN;
SELECT * from account;
##B先修改数据,提交事务
UPDATE account set money=money/100 where id=2;
SELECT * from account;

##b操作

复制代码
BEGIN;
SELECT * from account;
UPDATE account set money=money*80 where id=2;
COMMIT;
SELECT * from account;

得到结果:

相关推荐
Rain的Java大神之路6 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
无敌贵点大王6 小时前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
大海星辰7988 小时前
一次对账SQL“灵异事件”排查:NOT IN返回空集的坑
mysql
是翎8 小时前
深度长文|2026产品经理AI实践手册
人工智能·深度学习·学习·自然语言处理·数据挖掘
Linux-lucky8 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
知识分享小能手9 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
&不羁之风&11 小时前
从 MySQL 到 MongoDB:80 万系统日志(sys_log)平滑迁移完整实战(含 Windows 环境 mongoimport 安装与避坑)
mysql·mongodb
AI职业加油站12 小时前
数据要素价值释放年:大数据治理工程师,站上职业新风口
人工智能·学习·职场和发展·数据分析·职场发展
这个DBA有点耶12 小时前
InnoDB页结构深入:页分裂、页合并、填充因子——B+树底层机制全解析
数据库·mysql·架构
啄缘之间12 小时前
1.【SVA】什么是SVA?
经验分享·学习·测试用例·verilog·sva