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

mysql 开启事务sql

基础概念

MySQL中的事务(Transaction)是一组一起执行或都不执行的SQL语句。它的主要目的是为了保证数据的一致性和完整性。事务具有四个特性,通常被称为ACID特性:

  1. 原子性(Atomicity):事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  2. 一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态。
  3. 隔离性(Isolation):事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不会互相干扰。
  4. 持久性(Durability):一旦事务提交,则其结果就是永久的,即使系统崩溃也不会丢失。

开启事务SQL

在MySQL中,可以使用以下方式开启事务:

  1. 显式开启:使用START TRANSACTION;语句显式地开启一个事务。
  2. 隐式开启:在某些情况下,MySQL会自动隐式地开启事务,例如执行某些特定的SQL语句(如INSERT、UPDATE、DELETE等)时。
  3. 自动提交模式:默认情况下,MySQL处于自动提交模式,即每个SQL语句都被当作一个单独的事务来执行。可以通过设置autocommit变量来改变这一行为。

示例代码

以下是一个简单的示例,展示了如何在MySQL中开启事务并执行一系列SQL语句:

代码语言:txt
复制
START TRANSACTION;

-- 执行一系列SQL语句
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;

-- 提交事务
COMMIT;

在这个示例中,我们首先使用START TRANSACTION;语句开启了一个事务,然后执行了两个更新账户余额的SQL语句。最后,我们使用COMMIT;语句提交了事务,将更改永久保存到数据库中。

应用场景

事务在许多场景中都非常有用,特别是在需要保证数据一致性和完整性的情况下。以下是一些常见的应用场景:

  1. 银行转账:在银行转账过程中,需要同时更新两个账户的余额。如果其中一个更新失败,整个转账过程应该回滚,以确保数据的一致性。
  2. 订单处理:在处理订单时,可能需要执行多个步骤,如更新库存、计算价格、生成发票等。如果其中任何一个步骤失败,整个订单处理过程应该回滚。
  3. 数据备份与恢复:在进行数据备份或恢复时,可能需要执行一系列复杂的SQL语句。使用事务可以确保这些操作的原子性和一致性。

遇到的问题及解决方法

  1. 事务死锁:当两个或多个事务相互等待对方释放资源时,就会发生死锁。解决死锁的方法通常包括设置合理的超时时间、优化SQL语句的执行顺序等。
  2. 事务隔离级别:不同的应用场景可能需要不同的隔离级别。MySQL提供了四种隔离级别(读未提交、读已提交、可重复读、串行化),可以根据具体需求进行设置。
  3. 事务回滚:如果在事务执行过程中发生错误,可以使用ROLLBACK;语句回滚事务,撤销所有已执行的SQL语句。这有助于保持数据库的一致性。

更多关于MySQL事务的详细信息和最佳实践,可以参考MySQL官方文档或相关教程。

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

相关·内容

  • SQL事务

    SQL事务 什么是事务 事务的特性 事务的使用 事务的并发问题 事务隔离级别 什么是事务 不可分割的操作,假设该操作有ABCD四个步骤组成. 若ABCD四个步骤都成功完成,则认为事务成功....若ABCD中任意一个步骤操作失败,则认为事务失败 默认情况下每条sql语句都是一个事务 事务只对DML语句有效,对于DQL无效 事务的特性(ACID) 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功...事务的使用 开启事务 start transaction 提交事务 commit:所有语句全部执行完毕,没有发生异常,提交事务,更新到数据库当中。...回滚事务 rollback:当遇到一突发情况,撤销执行的sql语句 ? 事务并发问题 脏读 老板要给程序员发工资,程序员的工资是3.6万/月。...(事务开启,不允许其他事务的UPDATE修改操作),收费系统事先检测到他的卡里有3.6万。

    66240

    开启MYSQL慢查询日志,监控优化SQL效率

    一、安装登录MYSQL 1、下载地址:MYSQL官网(直接next安装即可) 2、安装完成后点击如下图所示输入密码进行登录操作 ?...登录成功 二、查看是否开启了慢查询日志 输入命令【show variables like 'slow_query_log'】,页面会显示是否开启了慢查询日志,slow_query_log =ON,代表已经开启...如果未开启,则需要执行该命令set global slow_query_log=on; ?...慢日志 三、开启索引的监控 通过设置log_queries_not_using_indexes开启为使用索引的监控,输入命令show variables like 'log_queries_not_using_indexes...日志路径 3.显示的日志记录在/apps/logs/mysql/slow3306.log目录 4.测试结果 ? 结果 5.查询日志记录 ? 日志记录

    3.1K20

    SQL事务

    事务 在执行SQL语句的时候,某些业务要求,一系列操作必须全部执行,而不能仅执行一部分。...#1 事务特性 Atomic,原子性,将所有SQL作为原子工作单元执行,要么全部执行,要么全部不执行; Consistent,一致性,事务完成后,所有数据的状态都是一致的,即A账户只要减去了100,B账户则必定加上了...对于单条SQL语句,数据库系统自动将其作为一个事务执行,这种事务被称为隐式事务。...要手动把多条SQL语句作为一个事务执行,使用BEGIN开启一个事务,使用COMMIT提交一个事务,这种事务被称为显式事务,例如,把上述的转账操作作为一个显式事务: BEGIN; UPDATE accounts...,即试图把事务内的所有SQL所做的修改永久保存。

    68620

    ⑨【MySQL事务】事务开启、提交、回滚,事务特性ACID,脏读、幻读、不可重复读。

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ MySQL事务 ⑨【事务...事务概述 事务: 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,这些操作要么同时成功,要么同时失败。...== MySQL的事务是默认自动提交的,当执行一条DML语句(对表字段进行增删改),MySQL会立即隐式地提交事务。 == 2....操作事务 MySQL操作事务: ①查看 / 设置事务提交方式 (@@autocommit) SELECT @@autocommit; #查看事务提交方式 SET @@autocommit = 0; #...事务隔离级别 MySQL默认隔离级别 —— Repeatable Read ①查看事务隔离级别: SELECT @@transaction_isolation; ②设置事务隔离级别: SET [SESSION

    72730

    springboot开启声明式事务

    前言 本小节回顾一下springboot中的声明式事务处理方式,也是实际项目中目前应用最多的一种事务处理方式,底层是基于aop来实现的 实现方式 1.在配置类上加上@EnableTransactionManagement...开启事务支持 @SpringBootApplication @EnableTransactionManagement public class DemoApplication { } 2.在service...实现类中加上@Transactional,如果该类中某个业务方法在执行时报错会进行回滚写法为:@Transactional(rollbackFor = Exception.class) 知识小结 开启注解事务管理...,等价于xml配置方式的 Spring提供了一个@EnableTransactionManagement 注解以在配置类上开启声明式事务的支持。...简单开启事务管理 事务没有回滚的可能原因 @Transactional注解修饰的函数中catch了异常,并没有往方法外抛。

    1.2K10

    MySQL——事务

    事务概述 事务是数据库系统区别于其他一切文件系统的重要特性之一 事务是一组具有原子性的SQL语句,或是一个独立的工作单元 事务特点 1....原子性 一个事务必须被视为不可分离的最小工作单位,整个事务中的所有操作要么全部提交成功,要么全部失败,对于一个事务来说,不可能只执行其中的一部分操作。...一致性(CONSISTENCY) 一致性是指事务将数据库从一种一致性状态转换到另外一种一致性状态,在事务开始之前和事务结束后数据库中数据的完整性没有被破坏。...SQL标准中定义的四种各类级别(隔离性由低到高)(并发性由高到低) 未提交读(READ UNCOMMITED) 已提交读(READ COMMITED) 可重复读(REPEATABLE READ)...大事务 运行的时间比较长,操作的数据比较多的事务 风险: 锁定太多的数据,造成大量的阻塞和锁超时 回滚所需要的时间比较长 执行时间长,容易造成主从延迟 如何处理大事务?

    2.3K20

    MySQL 事务

    如果事务失败,那么效果就和没有执行这些 SQL 一样,不会对数据库数据有任何改动。 ?... ♞ 持久性:即事务完成后,对数据库数据的修改被持久化存储 1.2 事务控制   在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。...1.2.1 事务控制语句 BEGIN 或 START TRANSACTION 显式地开启一个事务; COMMIT 或 COMMIT WORK 提交事务,并使已对数据库进行的所有修改成为永久性的;...直接用 SET 来改变 MySQL 的自动提交模式: # 查看事务提交哦方式 select @@autocommit; # 禁止自动提交 set autocommit = 0; # 开启自动提交...,注意当结束这个事务的同时也开启了个新的事务!

    2.9K31

    MySQL 事务

    I(Isolation)隔离性:隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。...说了这么多事务,你甚至可能在实际编程中并没有手动操作过事务,那么如何手动开启和关闭事务呢?...Mysql数据库默认是开启自动提交事务的,也就是说当你执行update/delete/insert操作时数据库引擎会自动开启一个事务,并且在操作完成后自动提交事务。...小伙手撕MySQL事务,发生了什么? MVCC 的查找规则1:只能查找创建时间小于等于当前事务 ID 的数据 小伙手撕MySQL事务,发生了什么?...事务5,尝试修改数据 小伙手撕MySQL事务,发生了什么? 此时回到事务2再次查询数据 小伙手撕MySQL事务,发生了什么?

    2.3K40

    MySQL事务

    1.3、事务提交方式 mysql中有两种事务提交方式: 手动提交 自动提交 二、事务手动提交 2.1、手动提交的过程 事务执行成功的过程:开启事务->执行多条件SQL语句->成功->事务提交 事务执行失败的过程...:开启事务->执行多条件SQL语句->失败->事务回滚 2.2、语法格式 格式: start transaction; #开启事务 commit; #提交事务 rollback; #回滚事务 案例...MySQL 默认每一条 DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,语句执行完毕自动提交事务,MySQL 默认开始自动提交事务。...是否开启自动提交事务 格式: select @@autocommit; 注意: @@表示全局变量,1 表示开启,0 表示关闭 取消自动提交事务 格式: set autocommit=0; 案例: mysql...4.2、手动提交原理图 如果开启了事务,其中有任何一条语句因为崩溃或者其它原因无法执行,那么该组中所有的sql语句都不会执行。

    5.2K10

    MySQL事务

    什么是事务? 事务就是保证一组数据库操作要么全部成功,要么全部失败。MySQL中,事务的支持是在引擎层实现的。...其他隔离级别的实现是通过创建视图的方式来实现的,在访问时以视图的逻辑结果为准,只不过每种隔离级别创建视图的时机不同: 读提交:视图是在每个SQL语句开始执行的时候创建 可重复读:视图是事务启动的时候创建...= OFF 2.通过SQL语句执行 -- 查看当前隔离级别 show variables like 'transaction_isolation'; -- 针对当前会话设置隔离级别 set session...-- 显示开启事务 begin/start transaction ; -- 提交事务 commit; -- 提交事务并自动启动下一个事务 -- 对于事务频繁使用的系统,可以减少begin/start...commit work and chain ; -- 回滚事务 rollback; 2.set autocommit=0; 该命令会将线程的自动提交关闭,只要执行一个select语句便开启事务,并且事务不会自动提交

    1.6K10

    MySQL事务

    隔离性:一个事物在最终提交之前,数据的改变对其他事务是不可见的。 持久性:事务的最终操作结果能被持久保存。 MySQL事务 接下来我们介绍MySQL中的事务是如何保证ACID特性的。...(以下不做特殊说明,都默认InnoDB引擎) 原子性: 我们在MySQL中可以使用以下语句开启一个事务: BEGIN / START TRANSACTION (START TRANSACTION还可以指定只读事务和读写事务...,不过使用的比较少) 提交事务:COMMIT 回滚事务:ROLLBACK 站在使用者的角度,我们开启一个事务,然后执行SQL语句,最终COMMIT成功则所有的SQL都会成功执行,如果失败执行ROLLBACK...如果执行commit的话,MySQL把最终结果刷到磁盘中。为了保证事务执行中,异常宕机导致事务仍可回滚,undo log的数据也是会被持久化到磁盘的。...这里很容易理解,因为我们开启了事务并创建了视图,id=1的记录虽然在事务二中被修改为100了,但是在事务一仍然可以根据trx_id和undo log中的“链条”找到自己当前trx_id对应的id=1记录的值

    2.9K20
    领券