首页
学习
活动
专区
圈层
工具
发布

mysql事务四个控制语句

MySQL事务的四个控制语句是:BEGIN(或START TRANSACTION)、COMMIT、ROLLBACK和SAVEPOINT。这些语句用于管理数据库事务的开始、提交、回滚以及设置保存点。

基础概念

  • 事务(Transaction):是一组一起执行或都不执行的数据库操作序列,它是一个不可分割的工作单位。事务具有原子性、一致性、隔离性和持久性(ACID特性)。
  • BEGIN/START TRANSACTION:标记事务的起始点。
  • COMMIT:提交事务,使所有更改永久化。
  • ROLLBACK:回滚事务,撤销所有未提交的更改。
  • SAVEPOINT:在事务中设置一个保存点,以便之后可以回滚到该点,而不是整个事务的开始。

优势

  • 数据完整性:通过事务控制,确保数据的准确性和完整性。
  • 并发控制:多个事务可以并发执行,但不会相互干扰,保证了数据的一致性。
  • 错误恢复:如果事务中的某个操作失败,可以通过回滚来撤销所有已执行的操作。

类型

  • 隐式事务:默认情况下,MySQL的每个单独语句都被视为一个事务。
  • 显式事务:通过BEGIN或START TRANSACTION明确开始一个事务。

应用场景

  • 银行转账:从一个账户扣除金额并同时向另一个账户增加相同金额,这两个操作必须作为一个事务来处理,以确保资金的安全。
  • 订单处理:在电商系统中,创建订单、更新库存和计算价格等操作需要作为一个事务来处理,以确保数据的一致性。

常见问题及解决方法

  1. 事务超时:如果事务执行时间过长,可能会导致超时。可以通过设置合适的超时时间来解决。
  2. 死锁:当两个或多个事务相互等待对方释放资源时,就会发生死锁。可以通过设置锁等待超时时间或优化事务逻辑来避免死锁。
  3. 数据不一致:如果事务没有正确提交或回滚,可能会导致数据不一致。确保在事务结束时正确调用COMMIT或ROLLBACK。

示例代码

代码语言:txt
复制
-- 开始一个事务
START TRANSACTION;

-- 执行一些数据库操作
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- 提交事务
COMMIT;

如果在上述事务中的某个操作失败,可以执行以下命令来回滚事务:

代码语言:txt
复制
-- 回滚事务
ROLLBACK;

更多关于MySQL事务的信息,可以参考MySQL官方文档或相关教程。

MySQL官方文档链接

请注意,上述链接可能会随着时间的推移而发生变化,请根据实际情况访问MySQL官方网站获取最新信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL TCL 事务控制

所以,使用事务处理的时候一定要确定所操作的表示是否支持事务处理,可以通过查看建表语句来查看有没有指定事务类型的存储引擎。当然,事务处理是为了保障表数据原子性、一致性、隔离性、持久性。...MySQL 提供了 SET TRANSACTION 语句,该语句可以改变单个会话或全局的事务隔离级别。...系统变量 @@autocommit 用来控制一条SQL语句提交后是否自动执行,默认值是1,表示在mysql命令行模式下每条增删改语句在键入回车后,都会立即生效,而不需要手动commit。...MySQL默认自动提交事务,即除非显式的开启事务(BEGIN 或 START TRANSACTION),否则每条 SOL 语句都会被当做一个单独的事务自动执行。...提交或继续事务。 如果您满意回滚后的状态,可以继续进行其他操作,并最终提交事务。 COMMIT; -- 提交事务 通过使用事务保存点,您可以更细粒度地控制事务的回滚操作,以适应复杂的业务需求。

1.5K10

springboot手动控制mysql事务

platformTransactionManager; @Resource private TransactionDefinition transactionDefinition; 开启事务.../提交事务 TransactionStatus transaction = platformTransactionManager.getTransaction(transactionDefinition...代码 完全符合我们之前的那份代码片段,有事务,也有锁 触发了代码之后,库存为 0 了,没有问题。 但是,订单居然有 20 笔!...我们的逻辑 代码运行的逻辑 在上面的示例代码的情况下,事务的提交在方法运行结束之后。 你细品,这个描述是不是迷惑性就没有那么强了,甚至你还会恍然大悟:这不是常识吗?...,手动提交事务, 再者就是重新创建一个类专门加锁,另一个类专门控制事务,就可以用Transactional 注解

3.2K10
  • 【说站】mysql事务的四个特点

    mysql事务的四个特点 特点 1、原子性,一个事务是不可再分割的整体,要么全部被执行,要么全部执行。 2、一致性,一个事务可以让数据从一种一致状态切换到另一种状态。...3、隔离性,一个事务不受其他事务的干扰,并且多个事务彼此隔离。 4、持久性,事务一旦提交,就永久地保存在本地。...set autocommit=0; start transaction;#可以省略   ②编写一组逻辑sql语句 注意:sql语句支持的是insert、update、delete   设置回滚点: savepoint... 回滚点名;   ③结束事务 提交:commit; 回滚:rollback; 回滚到指定的地方:rollback to 回滚点名; 以上就是mysql事务的四个特点,希望对大家有所帮助。...更多mysql学习指路:MySQL 收藏 | 0点赞 | 0打赏

    73820

    Postgresql源码(102)子事务控制语句分析

    1 子事务控制语句分析 1.1 执行savepoint 执行函数: 【立即执行】→DefineSavepoint→PushTransaction(从utility框架进入) 【延迟执行】→StartSubTransaction...(从顶层事务框架CommitTransactionCommand进入) 准入条件:必须在事务块内,即顶级事务内TBLOCK_INPROGRESS 或子事务内 TBLOCK_SUBINPROGRESS。...CommitTransactionCommand处理事务堆栈 2 plpgsql异常处理中的子事务 plpgsql中的异常处理部分也是用子事务实现的,在begin end块中的语句都是运行在子事务下的...也就是在plpgsql中只要有exception的语句,那么上面的begin中都会运行在子事务下。...子事务ID 事务和子事务在真正需要事务ID时才会申请一个永久的XID,一般增删改和几个其他场景才会分配XID。 子事务申请XID时,总是会先给父事务分配XID,保证子事务XID晚于父事务XID。

    1K30

    MySQL 中的事务控制机制

    事务控制是 MySQL 的重要特性之一。在 MySQL 中,InnoDB 和 NDB Cluster 是常见的事务型存储引擎。 1....自动提交 默认情况下,MySQL 是自动提交(autocommit)的。也就意味着:如果不是显式地开始一个事务,每个查询都会被当做一个事务执行 commit。...有些命令,在执行之前会强制执行 commit 提交当前连接的事务。比如 DDL 中的 alter table,以及lock tables 等语句。 2....事务中使用不同的存储引擎 MySQL 的服务层并不负责事务的处理,事务都是由存储引擎层实现。 在同一事务中,使用多种存储引擎是不可靠的,尤其在事务中混合使用了事务型和非事务型的表。...小结 本小节主要介绍了 MySQL 中事务控制的一些特点,如何调整自动提交(autocommit)、如何调整隔离级别调整、以及讲解了在事务中使用混合存储引擎的缺点。

    1.5K30

    MySQL 中的流程控制语句

    ··· else 【只能使用在 begin end 之间】 if 条件语句1 then 语句1; elseif 条件语句2 then 语句2; ... else 语句n; end if; 1.1.2...表达式 when 值1 then 结果1 或者 语句1 # 如果是语句需要加分号 when 值2 then 结果2 或者 语句2 ... else 结果n 或者 语句n end [case] #...when 条件2 then 结果2 或者 语句2 ... else 结果n 或者 语句n end [case] # 如果是放在 begin end 之间需要加 case,如果是在 select...循环 ☞ 语法 标签:while 循环条件 do 循环体 end while 标签; 说明  ① 标签是给 while 取个名字,标签和 iterate、leave 结合用于在循环内部对循环进行控制...☞ 循环控制 # 类似 java中的 continue iterate 循环标签; # 类似 java 中的 break leave 循环标签; ☞ 示例 # 求 1 ~ n 的和 # 创建存储过程

    2.2K30

    详解MySQL并发控制及事务原理

    今天的内容就和大家聊一聊MySQL数据库中关于并发控制、事务以及存储引擎这几个最核心的问题。本内容涉及的知识图谱如下图所示: ? 并发控制 ?...在MySQL中的并发控制,主要是讨论数据库如何控制表数据的并发读写。 例如有一张表useraccount,其结构如下: ?...那么在MySQL中是如何进行并发控制的呢?实际上与大多数并发控制方式一样,在MySQL中也是利用锁机制来实现并发控制的。 01 MySQL锁类型 在MySQL中主要是通过"读写锁"来实现并发控制。...MySQL事务 ? 前面在讲解了关于MySQL并发控制的过程中,也提到了事务相关的内容,接下来我们来更全面的梳理下关于事务的核心知识。...MySQL存储引擎 ? 前面的内容我们分别讲述了MySQL并发控制和事务的内容,而实际上在并发控制和事务的具体细节都是依赖于MySql存储引擎来实现的。

    1.1K20

    MySQL高级篇-流程控制语句

    我们可以在存储过程和函数中实现比较复杂的业务逻辑,但是需要对应的流程控制语句来控制,就像Java中分支和循环语句一样,在MySQL中也提供了对应的语句,接下来就详细的介绍下。...语句结构 说明 顺序结构 程序从上往下依次执行 分支结构 程序按条件进行选择执行,从两条或多条路径中选择一条执行 循环结构 程序满足一定条件下,重复执行一组语句 针对于MySQL 的流程控制语句主要有...注意:只能用于存储程序 语句类型 说明 条件判断语句 IF 语句和 CASE 语句 循环语句 LOOP、WHILE 和 REPEAT 语句 跳转语句 ITERATE 和 LEAVE 语句 1.分支结构...WHILE语句的基本格式如下: Java中的while语句 while(条件表达式){ // 循环体 } MySQL中的WHILE语句 [while_label:] WHILE 循环条件 DO...END; DROP PROCEDURE PROC_REPEAT; # 调用存储过程 CALL PROC_REPEAT(); 2.4 对比三种循环结构 这三种循环都可以省略名称,但如果循环中添加了循环控制语句

    1.1K10

    ⑤ 【MySQL】DCL语句 —— 用户管理、权限控制

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ ⑤ 【MySQL】DCL...语句 —— 用户管理、权限控制 SQL分类 : ①DDL:数据定义语言,用来定义数据库对象(数据库,表,字段) ②DML:数据操作语言,用来对数据库表中字段进行增删改 ③DQL:数据查询语言,用来查询数据库中表的记录...④DCL:数据控制语言,用来创建数据库用户,控制数据库的访问权限 DCL - 管理用户: MySQL用户管理 ①查询用户 USE mysql; SELECT * FROM USER; ②创建用户 CREATE...DCL - 权限控制: 常用权限分类: ALL\ALL PRIVILEGES:所有权限 SELECT:查询数据的权限 INSERT:插入数据的权限 UPDATE:修改数据的权限 DELETE:删除数据的权限...ALTER:修改表的权限 DROP:删除数据库/表/视图的权限 CREATE:创建数据库/表的权限 MySQL控制用户权限: ①查询权限 SHOW GRANTS FOR '用户名'@'主机名'; ②授予权限

    76230

    控制语句

    选择语句 if语句 if语句会判断括号中的条件是否成立,如果成立则执行if语句中的代码块,否则跳过代码块继续执行。...当变量的值与case语句的值相等时,那么case语句之后的语句开始执行,直到break语句出现才会跳出switch语句。 当遇到break语句时,switch语句终止。...语法 for (初始化; 布尔表达式; 更新) { //代码语句 } 关于for循环有以下几点说明: 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。...如果为false,循环终止,开始执行循环体后面的语句。 执行一次循环后,更新循环控制变量。 再次检测布尔表达式。循环执行上面的过程。...System.out.print( x );             System.out.print("\n");         }     } } 运行结果 10 20 continue关键字 continue适用于任何循环控制结构中

    1.2K60

    事务控制

    事务控制 事务(Transaction) 是访问和更新数据库的基本执行单元,一个事务中可能会包含多个 SQL 语句,事务中的这些 SQL 语句要么都执行,要么都不执行,而 MySQL 它是一个关系型数据库...在 MySQL 中,存在一些特殊的命令,如果在事务中执行了这些命令,会马上强制执行 commit 提交事务;比如 DDL 语句(create table/drop table/alter/table)、...不过,常用的 select、insert、update 和 delete命令,都不会强制提交事务。 手动提交 如果需要手动 commit 和 rollback 的话,就需要明确的事务控制语句了。...典型的 MySQL 事务操作如下 start transaction; ... # 一条或者多条语句 commit; 上面代码中的 start transaction 就是事务的开始语句,编写 SQL...我们用 start transaction 命令启动一个事务,然后再 cxuan005 表中插入一条数据,此时 mysql02 不做任何操作。涉及的 SQL 语句如下。

    61830

    深入理解Mysql——锁、事务与并发控制

    本文对锁、事务、并发控制做一个总结,看了网上很多文章,描述非常不准确。如有与您观点不一致,欢迎有理有据的拍砖! mysql服务器逻辑架构 ?...每个连接都会在mysql服务端产生一个线程(内部通过线程池管理线程),比如一个select语句进入,mysql首先会在查询缓存中查找是否缓存了这个select的结果集,如果没有则继续执行 解析、优化、执行的过程...mysql并发控制——共享锁、排他锁 共享锁 共享锁也称为读锁,读锁允许多个连接可以同一时刻并发的读取同一资源,互不干扰; 排他锁 排他锁也称为写锁,一个写锁会阻塞其他的写锁或读锁,保证同一时刻只有一个连接可以写入数据...事务 事务就是一组原子性的sql,或者说一个独立的工作单元。 事务就是说,要么mysql引擎会全部执行这一组sql语句,要么全部都不执行(比如其中一条语句失败的话)。...开启 自动提交(AutoCommit,mysql默认) mysql默认采用AutoCommit模式,也就是每个sql都是一个事务,并不需要显示的执行事务。

    1.7K40

    Java中非事务控制事务

    欢迎关注微信公众号:数据科学与艺术 作者WX:superhe199 标题: Java中非事务控制事务 本文探讨Java中非事务控制事务的实践和应用。...在本文中,我们将讨论如何使用Java编程语言实现这些非事务控制事务,并提供一些具体的案例分析。 首先,让我们明确什么是非事务控制事务。...如果转账成功,提交事务,并关闭数据库连接。 下面是一个示例代码,展示了如何在Java中实现这个非事务控制事务的转账功能。...null; try { // 创建数据库连接 connection = DriverManager.getConnection("jdbc:mysql...总结: 在本文中,我们介绍了在Java中实现非事务控制事务的方法,并通过一个简单的案例分析进行了说明。非事务控制事务是一种在没有数据库事务支持的情况下,通过编程技术模拟出类似事务的特性的方法。

    32810

    深入理解 MySQL ——锁、事务与并发控制

    本文首发于vivo互联网技术微信公众号 https://mp.weixin.qq.com/s/JFSDqI5yaOc-Znr6Q1ohVA 作者:张硕 本文对 MySQL 数据库中有关锁、事务及并发控制的知识及其原理做了系统化的介绍和总结...目录 1、MySQL 服务器逻辑架构 2、MySQL 锁 3、事务 4、隔离级别 5、并发控制 与 MVCC 6、MySQL 死锁问题 1、MySQL 服务器逻辑架构 ---- 每个连接都会在 MySQL...服务端产生一个线程(内部通过线程池管理线程),比如一个 select 语句进入,MySQL 首先会在查询缓存中查找是否缓存了这个 select 的结果集,如果没有则继续执行解析、优化、执行的过程;否则会之间从缓存中获取结果集...事务就是说,要么 MySQL 引擎会全部执行这一组sql语句,要么全部都不执行(比如其中一条语句失败的话)。...5、并发控制 与 MVCC ---- MVCC (multiple-version-concurrency-control)它是个行级锁的变种, 在普通读情况下避免了加锁操作,因此开销更低。

    1.4K80

    深入理解 MySQL ——锁、事务与并发控制

    本文对 MySQL 数据库中有关锁、事务及并发控制的知识及其原理做了系统化的介绍和总结,希望帮助读者能更加深刻地理解 MySQL 中的锁和事务,从而在业务系统开发过程中可以更好地优化与数据库的交互。...(图片来源MySQL官网) 每个连接都会在 MySQL 服务端产生一个线程(内部通过线程池管理线程),比如一个 select 语句进入,MySQL 首先会在查询缓存中查找是否缓存了这个 select 的结果集...child (id) values (90),(102); ##事务一 mysql> START TRANSACTION; mysql> SELECT * FROM child WHERE id >...事务就是说,要么 MySQL 引擎会全部执行这一组sql语句,要么全部都不执行(比如其中一条语句失败的话)。...5、并发控制 与 MVCC MVCC (multiple-version-concurrency-control) 它是个行级锁的变种, 在普通读情况下避免了加锁操作,因此开销更低。

    1.1K10

    深入理解 MySQL—锁、事务与并发控制

    本文对 MySQL 数据库中有关锁、事务及并发控制的知识及其原理做了系统化的介绍和总结,希望帮助读者能更加深刻地理解 MySQL 中的锁和事务,从而在业务系统开发过程中可以更好地优化与数据库的交互。...(图片来源MySQL官网) 每个连接都会在 MySQL 服务端产生一个线程(内部通过线程池管理线程),比如一个 select 语句进入,MySQL 首先会在查询缓存中查找是否缓存了这个 select 的结果集...child (id) values (90),(102); ##事务一 mysql> START TRANSACTION; mysql> SELECT * FROM child WHERE id >...事务 ---- 事务就是一组原子性的 sql,或者说一个独立的工作单元。事务就是说,要么 MySQL 引擎会全部执行这一组sql语句,要么全部都不执行(比如其中一条语句失败的话)。...并发控制 与 MVCC ---- MVCC (multiple-version-concurrency-control) 它是个行级锁的变种, 在普通读情况下避免了加锁操作,因此开销更低。

    1.3K20

    什么是事务?事务的四个特性以及事务的隔离级别

    事物的四个特性(ACID) ● 原子性(Atomicity):操作这些指令时,要么全部执行成功,要么全部不执行。...即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。...eg:例如事务T1在读取某一数据,而事务T2立马修改了这个数据并且提交事务给数据库,事务T1再次读取该数据就得到了不同的结果,发送了不可重复读。...Tips:大多数数据库默认的事务隔离级别是Read committed,比如Sql Server , Oracle。     Mysql的默认隔离级别是Repeatable read。...对于使用MySQL命令窗口而言,一个窗口就相当于一个链接,当前窗口设置的隔离级别只对当前窗口中的事务有效;对于JDBC操作数据库来说,一个Connection对象相当于一个链接,而对于Connection

    18.8K114
    领券