Mysql_事务控制

Tailscale 自建 DERP 中继服务器 Tailscale自建DERP中继服务器 阅读详情

#TCL 事务控制

 

    Transaction Control Language 事务控制语言

        事务有一个单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句时相互依赖的。

    并发事务

    1、事务的并发问题是如何发生的?

    多个事务 同时 操作 同一个数据库的相同数据时

    2、并发问题都那些?

    脏读:一个事务读取了其它事务还没有提交的数据,读到的是其它事务“更新”的数据

    不可重复读:一个事务多次读取,结果不一样

    幻读:一个事务读取了其它事务还没有提交的数据,只是读到的是 其它事务“插入”的数据

 

    

 

    事务:

        一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。

 

        案例:转账

        张三向李四进行转账500元

            张三   1000

            李四   1000

            涉及到两条SQL语句

        update 表 set 张三的账户=500 where name='张三';

        如果转账时出现意外 事务就会报异常 回到最初时 这两条语句是一个执行单元需要两条语句都执行完毕

        update 表 set 李四的账户=1500 where name='李四';

 

    事务的特性:

    ACID

        原子性:一个事务不可再分割,要么都执行要么都不执行

        一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致的状态

        隔离型:一个事务的执行不受其它事务的干扰

        持久性:一个事务一旦提交,则会永久的改变数据库的数据

 

    事务的创建

        隐士事务:事务没有明显的开启和结束的标记

        比如insert、update、delete语句

        如:delete from 表 where id =1;比如执行一条删除语句 会自动提交事务 如果我想两条语句位一个单元就需要关闭自动提交事务

 

        显示事务:事务具有明显的开启和结束的标记

        前提:必须先设置自动提交功能位禁用状态

            set autocommit = 0;

            步骤1:开启事务

            set autocommit=0;

            statr transaction;可选的

            步骤2:编写事务的sql语句(select insert update delete)

            语句1;

            语句2;

            .... ....

            步骤3:结束事务

            commit;提交事务

            rollback;回滚事务

            savepoint 节点名;设置保存点

 

    事物的隔离级别:

            read uncommitted:出现脏读、幻读、不可重复读

            read committed:避免脏读,出现脏读和不可重读读

            repeatale read:避免脏读、不可重复读,出现幻读

            serializable:避免脏读、幻读、不可重复读,但效率底下

 

            mysql中默认 第三个隔离级别 repeatable read

            oracle中默认 第二个隔离级别 read committed

        查看隔离级别

            select @@tx_isolation;

        设置隔离级别

            set session(当前)|global(全局) transaction isolation level 隔离级别;

 

        开启事务的语句;

        update 表 set 张三的账户=500 where name='张三';

        update 表 set 李四的账户=1500 where name='李四';

        结束事务的语句;

 

自己理解事务 set autocommit=0;将自动提交事务关闭 如果不关闭自动提交事务 一条update执行完就自动提交事务

我需要两条甚至多条增删改查语句,就需要关闭自动提交事务。

就好比一个账户与另一个人转账:一条是减去账户的余额sql语句,对应一条时账户增余额语句,如果第一账户转出的语句执行完,出现意外,事务就直到作用,需要两条语句都执行才能完成。

所以事务是一个语句组执行单元

 

    #1.查看数据引擎 InnoDB支持事务

        SHOW ENGINES;

    #2.查看自动事务提交 autocommit

        SHOW VARIABLES LIKE 'autocommit';

         

 

    #3.关闭自动提交事务  只是在当前的回话中off了

        SET autocommit = 0;

        

 

演示事务案例

        DROP TABLE IF EXISTS account;

        CREATE TABLE IF NOT EXISTS account(

            id INT PRIMARY KEY AUTO_INCREMENT,

            username VARCHAR(20),

            balance DOUBLE

        );

        插入两个账户 余额分别为1000元

        INSERT INTO account(username,balance) VALUE('张无忌',1000),('赵敏',1000);

        

 

#演示事务的使用步骤

        #开启事务

            SET autocommit=0;

            START TRANSACTION;

        #编写一组事务语句

            UPDATE account SET balance=500 WHERE username='张无忌';

            UPDATE account SET balance=1500 WHERE username='赵敏';

        #结束事务 提交或回滚

            COMMIT;

    事务提交  再select * from account;显示的结果

        

 

        #开启事务

            SET autocommit=0;

            START TRANSACTION;

        #编写一组事务语句

            UPDATE account SET balance=1000 WHERE username='张无忌';

            UPDATE account SET balance=1000 WHERE username='赵敏';

        #结束事务 回滚事务

            ROLLBACK;

 

        进行事务回滚    两条sql语句将两个账户修改为1000元 将执行的事务回滚 原来的两个账户余额分别位500,1500 所以没有变化

        如果是回滚 插入语句时驻留在内存中 没有提交的磁盘当中

        

 

事务的隔离级别

        

        

 

    查看前数据库的隔离级别  默认的安全隔离

        select @@tx_isolation;

        

    set names gbk;设置字符集

第一个隔离级别 read uncommitted 读未提交的事务

    设置隔离级别为最低级别  set session transaction isolation level read uncommitted; 设置事务不受约束

      设置隔离级别为最低级别  才能看到脏读

    

 

    再进行隔离级别的查看 为read-uncommitted

    

 

    事务一. t1 开启事务同时更新一条语句  将张无忌改为了join 

    

 

此时没有没有提交事务 查询数据

    

 

此时打开第二个窗口 也要设置事务的隔离级别最低 read uncommitted

 

事务二。t2 开启事务

当事务一,提交执行 rollback回滚事务时 就会看到脏读和幻读

 

第二个隔离级别 read committed 可以避免脏读 但不可避免重复读

    事务一 t1 read committed 读已提交的事务 

    

事务开启 为数据更新将张无忌 改为join

 

 

事务二t2 也改为读已提交的事务

 

事务一t1 修改张无忌为john中 未提交事务 事务二t2中select查询的还是张无忌 所以避免了脏读 

但不避免了重复读 在多次查询中出现不一样 出现不可重复读 事务二t2未提交

 

第三个隔离事务级别 repeatale-read  能解决脏读 不可重复读 但不能解决 幻读

同时都设置为

事务一与事务二 开启事务

事务一t1  将john更改为tom 但事务没有提交 

事务二t2  执行第一次查询 为join 此时t1为未提交事务

事务一t1 提交事务commit  事务二再次进行查询未出现t1修改tom  两个事务进行隔离 互不干涉

事务二 t2提交事务 在隐式提交事务 select *from account;

 

隔离事务级别 repeatale-read 不能解决 幻读 如:

事务一 t1 查询有两行数据  update account set username='kkk'; 按说只有两条数据修改

 

事务二 t2 insert into account value(null,'俊杰',1000); 插入一条数据时 同时t2提交 表中就会出现三条数据 

事务一  再进行更新操作时 就会出现幻读的现象 因为t2插入数据以后提交事务 t1在进行更新就会出现操作了3条数据

 

隔离事务级别 最高级别 Serializable;  串行化性能 效率底下

事务一与事务二 设置为serializable 最高隔离级别

 

t1开启事务 执行操作 t2此时也开启事务 要进行插入操作时出现阻塞  说明t1开启事务t1持有锁 t2需要等待t1释放锁

 

#2.delete和truncate在事务使用时的区别

    #演示delete delete不支持回滚的

        SET autocommit=0;

        START TRANSACTION;

        DELETE FROM account;

        ROLLBACK;

    删除account表 rollback进行回滚

 

    #演示truncate truncate不支持回滚的

        #在回滚时truncate 磁盘提交文件 truncate不支持回滚的

        SET autocommit=0;

        START TRANSACTION;

        TRUNCATE TABLE account;

        ROLLBACK;

 

#3.演示savepoint的使用

    SET autocommit=0;

    START TRANSACTION;

    DELETE FROM account WHERE id=1;

    SAVEPOINT a;#设置保存点

    DELETE FROM account WHERE id=3;

    ROLLBACK TO a;#回滚到保存点

原来查询的  开启事务 执行两条删除语句 回滚到a节点  DELETE FROM account WHERE id=3;被回滚 id=1数据被删除 id=3没有删除

 

Qwen3.5在昇腾NPU上部署:vLLM-Ascend全链路实战 大语言模型推理框架(如vLLM)通过PagedAttention等内存调度机制,显著提升显存利用率与吞吐性能;国产AI芯片(如昇腾NPU)需配套专用算子优化与硬件感知调度才能释放真实算力。本文聚焦Qwen3.5大语言模型在昇腾平台的端到端部署,深入解析vLLM-Ascend如何协同CANN工具链、适配RoPE位置编码与Tokenizer映射、调优block_size与kv_cache_dtype等关键参数,实现单卡42 tokens/s高吞吐与112ms低延迟。内容覆盖环境验证、源码编译、模型权重转换、服务 阅读详情

相关推荐

Matlab中eig内置函数转为C语言

本文记录一下如何将MATLAB中的eig函数转为C语言,即通过C语言求解矩阵的特征值与特征向量。[V,D]=eig(Rx)中V为矩阵Rx的特征向量,D为矩阵的特征值。其中Rx维度为12*12的复矩阵。 首先在MATLAB端创建入口函数保存为eigvalue.m: 打开MATLAB Coder,添加入口函数: 3.在定义输入类型窗口中,需要添加输入数据来训练...

u011441044的博客 3517

MySQL 中的事务控制机制

MySQL 可以通过 set transaction_isolation 命令来调整隔离级别,新的隔离级别会在下一个事务开始时生效。对于 MyISAM 这种非事务型的表,修改 autocommit 不会有任何影响,因为非事务型的表,没有 commit或 rollback 的概念,它会一直处于 autocommit 启用的状态。在同一事务中,使用多种存储引擎是不可靠的,尤其在事务中混合使用了事务型和非事务型的表。MySQL 的服务层并不负责事务的处理,事务都是由存储引擎层实现。

2301_78008478的博客 612

学习Python,小白如何搭建Python环境?

学习Python,首先需要搭建好Python环境,主要分为【运行环境搭建】、【开发环境搭建】以及【Python环境配置】三个环节,接下来我将对Python环境搭建这三个部分进行介绍。

weixin_72923265的博客 9015

MySQL事务管理

隔离级别越严格,安全性越高,但数据库的并发性能也就越低,在选择隔离级别时需在两者之间找一个平衡点表中只写出了各种隔离级别下进行读操作时是否需要加锁,因为无论哪种隔离级别,只要需进行写操作就一定要加锁。

GG_Bruse的博客 2788

从GAN生成失败案例出发:为什么你的AI画不准位置?CoordConv保姆级解决方案

本文深入探讨了GAN生成图像时位置偏移问题的根源,并提供了CoordConv的保姆级解决方案。通过分析传统CNN在空间坐标建模上的缺陷,详细介绍了CoordConv的原理、实现步骤及在StyleGAN2等模型中的实战应用,显著提升了医学图像生成等任务的定位精度。

pp12345的博客 206

Flow Matching03-01:微分方程【微分方程(描述变化规律的方程):包含未知函数和它的导数的方程】【公式解(精确)、数值解(逼近)】

好的,我将从数学角度详细解释Flow Matching,从高中生能理解的基础知识开始,逐步深入到高级概念。

u013250861的博客 221

mysql数据库之事务

原子性(Atomicity)一致性(Consistency )隔离性(Isolation)持久性(Durability)这是可靠数据库所应具备的几个特性。

cxin1225的博客 2986

Transformers 实战修炼与源码剖析专栏大纲

本专栏以 Hugging Face Transformers 为主线,围绕“能用、会调、敢上线、懂源码”四个目标展开。内容不把理论堆成公式墙,而是用真实或拟真的业务场景驱动:客服分类、合同抽取、知识库问答、模型微调、推理服务、监控告警、源码扩展等。采用“业务痛点 → 三人剧本对话 → 代码实战 → 总结思考”的四段式结构,让读者在动手完成一个个小项目的过程中,逐步理解 Tokenizer、Model、Pipeline、Trainer、Generation、PEFT、Accelerate、Serving等概念

davidwang456的专栏 928

【MySQL】事务管理

CURD不加控制,会有什么问题?这是一个经典的多线程并发导致数据不一致的问题,MySQL既然提供数据存储服务,那么它也要想办法解决上面的问题。那CURD满足什么属性,能解决上述问题?买票的过程得是原子的吧。(原子性)买票互相应该不能影响吧。(隔离性)买完票应该要永久有效吧。(持久性)买前和买后都要是确定的状态吧。(一致性)事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。

2301_80224556的博客 1709

【OpenFOAM】-olaFlow-算例10-wavemakerTank

采用 Flap和Piston两种方式的动网格进行造波

ou_no的博客 2169

YOLOv11 改进 - 注意力机制 | HaloNet 局部自注意力 (Local Self-Attention) 以分块交互策略实现高效全局上下文建模

本文介绍了局部自注意力机制(HaloAttention)在YOLOv11中的结合应用。局部自注意力通过关注输入数据局部区域来捕捉特征关系,能降低计算复杂度、增强局部特征捕捉,且可与CNN结合。其计算时先定义局部窗口,再计算注意力权重并加权求和。我们将HaloAttention集成到YOLOv11的检测头中,并进行相关注册和配置。实验表明,改进后的模型在目标检测和实例分割等任务中表现更佳,证明了自注意力模型在传统卷积主导领域的有效性。

魔改工程师的博客 1143

MySQL事务控制语句

MySQL事务控制语句          在mysql命令行的默认下,事务都是自动提交的,sql语句提交后马上会执行commit操作。因此开启一个事务必须使用begin,start transaction,或者执行 set autocommit=0;  可以使用的事务控制语句 start transction | begin : 显示的开启一个事务  commit (commit work

xiaobudaics的专栏 1016

【2022】人工智能☆✨

1. 朴素⻉叶斯⽅法是⼀种 ( ) ⽅法。A.机器学习的分类B.不确定性推理C.知识表示答案:A解析:朴素贝叶斯分类器是基于贝叶斯定理与特征条件独立假设的分类方法。它通过学习训练数据集来预测未知数据的类别标签,因此属于机器学习中的监督学习分类方法。选项B不确定性推理和选项C知识表示虽然与朴素贝叶斯方法有一定的关联,但它们并不是朴素贝叶斯方法的主要应用领域或定义特性。2. 关于启发式搜索描述正确的是 ( )。

super_mochi1 403

php如何处理mysql事务控制

       博主最近在开发一个项目的时候,由于需要使用mysql事务进行控制,防止业务出错,所以就想到了用mysql事务控制来完成,因为是第一次使用原生的PHP处理mysql事务控制,自然也是百度了一番,最后还是自己总结出了方法,大家可以参考参考,代码如下: #链接数据库 $conSW = mysqli_connect("数据库地址", "账户", "密码", "数据库名称"); if (!...

HZX19941018的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

mysql事务控制

mysql事务控制

KangJinXuan的博客 694

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MySQL中事务控制语句_【MySQL技术内幕】50-事务控制语句

在 MySQL命令行的默认设置下,事务都是自动提交(auto commit)的,即执行SQL语句后就会马上执行 COMMIT操作。因此要显式地开启一个事务需使用命令BEGIN、 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,禁用当前会话的自动提交。每个数据库厂商自动提交的设置都不相同,每个DBA或开发人员需要非常明白这一点,这对之后的SQL编程会有非凡的意义,...

weixin_42355256的博客 450

MySQL中的事务控制的介绍

1:事务控制 默认情况下,MySQL是自动提交(autocommit)的,什么意思?意思就是说你insert,或update某表之后,不需要commit,你的操作也会成功的改变表中的数据。2:为什么需要事务控制和锁 事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,

qq_27028821的博客 686

mysql事务控制语句

事务控制语句:BEGIN或START TRANSACTION;显式地开启一个事务;COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称为永久性的;ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;SAVEPOINT identifier;SAVEPOI...

javaZhong的博客 7788

MySQL事务控制

MySQL高级进阶 1.了解什么是事务控制 2.熟悉事务的特性 3.掌握事务控制的作用【重点】 什么是事务? 事务的四个特性 原子性:原子,不可再分割 MySQL的事务控制 实际演练:银行转账的例子 查看自动提交是否开启,默认为1,开启状态。 select @@autocommit; 开启一个事务 start transaction; 张三给李四转账100 update bank_accou...

ABCisCOOL的博客 725

八、MySQL之事务控制语言

新星计划第3季之第八篇

qq_43499848的博客 976

MySQL事务(2):事务控制

事务控制事务控制语句1)常用事务语句2)差异辨析3)注意事项已正确执行语句不会自动回滚rollback to savepoint并非结束事务隐式提交SQL语句 事务控制语句 MySQL默认设置下,事务都是自动提交的,即SQL执行后会立即执行commit操作。 1)常用事务语句 显式的开启一个事务需要使用begin、start transaction或者执行set autocommit=0,通过这些...

Jakob_Hu的博客 1503

mysql commit work_学习MySQL事务控制语句的用法

MySQL事务控制语句在mysql命令行的默认下,事务都是自动提交的,sql语句提交后马上会执行commit操作。开启一个事务必须使用begin,start transaction,或执行 set utocommit=0;可以使用的事务控制语句start transction | begin : 显示的开启一个事务commit (commit work)commit work与completion...

weixin_29281915的博客 824

笔记整理之 MySQL事务控制语句

MySQL事务控制语句 在mysql命令行的默认下,事务都是自动提交的,sql语句提交后马上会执行commit操作。因此开启一个事务必须使用begin,start transaction,或者执行 set autocommit=0; 可以使用的事务控制语句 start transction | begin : 显示的开启一个事务 commit (commit work) commit work与c...

csdn's blog 1万+

MySQL TCL 事务控制语言

学习java做笔记

qq_63662109的博客 791
上一篇: Mysql_DDL数据管理语言
下一篇: Mysql_SQL常见的数据类型
YanQiu_Only
博客等级 码龄10年 6粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值