当前位置: 首页 > backend >正文

事务操作语句

操作语句

开启事务
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);#使用远程连接工具在开用户bset 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;

得到结果:

http://www.xdnf.cn/news/8860.html

相关文章:

  • ModbusRTU转profibusDP网关与电动机保护器通讯案例
  • 【操作系统】-4.3.1文件的层次结构
  • Linux驱动学习笔记(九)
  • Vue 3 (2) 模块化开发入门教程(ESM方式)
  • 32-低功耗与钩子函数
  • 人工智能数学基础实验(四):最大似然估计的-AI 模型训练与参数优化
  • 电路图识图基础知识-回路编号及代号(四)
  • 微信小程序常用方法
  • QListWidgetItem的函数介绍
  • Leetcode刷题 | Day67_图论12_Floyd算法 / A*算法
  • Kafka Consumer工作流程
  • 大数据治理:大数据环境下协同办公系统的数据串联与深度分析
  • python打卡训练营打卡记录day36
  • Windows系统部署Redis
  • Spring Cloud项目登录认证从JWT切换到Redis + UUID Token方案
  • 阿里千问系列:Qwen3技术报告解读(上)
  • 力扣第451场周赛
  • Linux基本指令篇 —— cd指令
  • 练习实践--deepseek的使用环境搭建回顾--火山方舟
  • (每日一道算法题)实现 pow(x, n) 的快速幂解法
  • 本地处理 + GPU 加速 模糊视频秒变 4K/8K 修复视频老旧素材
  • 前端协同文档实现思路
  • LLaMA-Factory 微调模型与训练数据量对应关系
  • 【每日一题 | 2025年5.19 ~ 5.25】动态规划相关题
  • 篇章一 数据结构——前置知识(一)
  • Java 类加载机制详解
  • 【SCL编程案例】1-16整数的随机排列
  • leetcode hot100刷题日记——第一周没做好的题目总结
  • C#拾遗补漏之 Dictionary 详解
  • 【从0到1搞懂大模型】chatGPT 中的对齐优化(RLHF)讲解与实战(9)