首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql 创建事务的过程

MySQL 创建事务的过程

基础概念

事务(Transaction)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称ACID特性。

创建事务的过程

  1. 开启事务:使用START TRANSACTIONBEGIN语句来标记事务的开始。
  2. 执行SQL语句:在事务中执行一系列的SQL操作。
  3. 提交事务:如果所有操作都成功,使用COMMIT语句提交事务,使所有更改永久生效。
  4. 回滚事务:如果发生错误或不符合业务逻辑的情况,使用ROLLBACK语句撤销事务中的所有操作。

优势

  • 数据一致性:确保数据库从一个一致状态转移到另一个一致状态。
  • 原子性:事务中的所有操作要么全部完成,要么全部不完成。
  • 隔离性:多个事务并发执行时,每个事务的操作不会被其他事务干扰。
  • 持久性:一旦事务提交,其结果就是永久的,即使系统崩溃也不会丢失。

类型

  • 隐式事务:默认情况下,MySQL的每条SQL语句都是一个隐式事务。
  • 显式事务:通过START TRANSACTIONBEGINCOMMITROLLBACK语句显式地控制事务。

应用场景

  • 银行转账:确保从一个账户扣除金额和向另一个账户增加金额的操作是原子的。
  • 订单处理:确保订单创建、库存更新和支付处理等操作要么全部成功,要么全部失败。
  • 数据备份与恢复:在备份过程中,确保数据的一致性和完整性。

常见问题及解决方法

  1. 事务隔离级别设置不当
    • 问题:不同事务之间可能会出现脏读、不可重复读或幻读。
    • 解决方法:根据应用需求设置合适的事务隔离级别,如READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE
    • 解决方法:根据应用需求设置合适的事务隔离级别,如READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE
  • 死锁
    • 问题:两个或多个事务互相等待对方释放资源,导致事务无法继续执行。
    • 解决方法:优化事务逻辑,减少事务持有锁的时间,或者使用数据库提供的死锁检测和解决机制。
    • 解决方法:优化事务逻辑,减少事务持有锁的时间,或者使用数据库提供的死锁检测和解决机制。
  • 事务超时
    • 问题:事务执行时间过长,导致数据库资源被长时间占用。
    • 解决方法:设置合适的事务超时时间,或者优化事务逻辑以减少执行时间。
    • 解决方法:设置合适的事务超时时间,或者优化事务逻辑以减少执行时间。

示例代码

代码语言:txt
复制
START TRANSACTION;

-- 执行一系列SQL操作
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- 提交事务
COMMIT;

-- 如果发生错误,回滚事务
ROLLBACK;

参考链接

通过以上信息,您可以全面了解MySQL创建事务的过程及其相关概念、优势、类型、应用场景和常见问题解决方法。

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

相关·内容

MySQL的存储过程_MySQL创建存储过程

如果将这些sql操作封装在存储过程中,只需网络交互一次可能就可以了; 存储过程基础语法 1、创建存储过程语法 CREATE PROCEDURE 存储过程名称 ([ 参数列表 ]) BEGIN --...PROCEDURE [ IF EXISTS ] 存储过程名称 ; 注意点:上面创建存储过程的语句在navicat或者sqlyog中没问题,但是放到命令行中执行会报错,在命令行中模式下,需要通过关键字...delimiter 指定SQL语句的结束符 存储过程中的变量 在MySQL中,变量一般可分为分为三种类型: 系统变量、用户定义变量、局部变量; 一、系统变量 系统变量是MySQL服务器系统自身提供的...result := '不及格'; end if; END; 执行下调用 call p4(90,@result); select @result; 案例演示 下面有一张员工表 案例需求: 创建存储过程...循环语句在编程中经常被用到,常用于对批量的数据进行循环处理,在mysql的存储过程中,也提供了几种常用的循环语句,包括:while循环,repeat循环,和loop循环; 1、while循环语句 while

24.1K31

mysql存储过程----创建

存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。...存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。 优点 存储过程可封装,并隐藏复杂的商业逻辑。 存储过程可以回传值,并可以接受参数。...缺点 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。 存储过程的性能调校与撰写,受限于各种数据库系统。...pro_test的,则删除该存储过程。...DROP PROCEDURE IF EXISTS pro_test// 创建存储过程: 关键字CREATE PROCEDURE,下面语句意思,创建名为pro_test的存储过程 CREATE PROCEDURE

2.1K20
  • MySQL innodb引擎的事务执行过程

    问题3:以及刷新redo和脏数据的相关进程; 总结以上的三个问题,其实就是关于MySQL innodb事务的流程;那么接下来,我将详细总结下一一一:MySQL innodb的事务流程: 1.接下来我就以...如果在执行的过程中发生了错误,要回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过。...需要注意的是,事务过程中,先把redo写进redo log buffer中,然后MySQL后台进程page cleaner thread适当的去刷新redo到低层磁盘永久保存; 因为刷新buffer pool...伴随着这个问题,我重点说下,MySQL innodb 引擎事务commit的过程: MySQL为了保证master和slave的数据一致性,就必须保证binlog和InnoDB redo日志的一致性,为此...但是持有这把锁之后,会导致组提交失败;直到MySQL5.6之后,才解决了这个问题,借助序列来保证binlog刷新也可以组提交;关于redo 和binlog组提交,请看下一篇文章, 事务崩溃恢复过程如下:

    94511

    MySQL 之 事务、存储过程、索引

    事务基本原理 基本原理:Mysql允许将事务统一进行管理(存储引擎INNODB),将用户所做的操作,暂时保存起来,不直接放到数据表(更新),等到用于确认结果之后再进行操作。...保证了对数据操作的数据安全性。 事务在mysql中通常是自动提交的,但是也可以使用手动事务。 事务ACID特性 原子性(atomicity)。...SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。...在存储过程创建的时候,参数可有0到多个,参数的属性可分为以下3种: IN 输入参数:表示调用者向存储过程传入值(传入值可以是字面量或变量) OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(...(参数1,...); 删除存储过程 删除已经创建的存储过程使用【DROP】语句,具体语法如下: DROP PROCEDURE 存储过程名; 存储过程在哪个库下面创建的只能在对应的库下面才能使用!!!

    73620

    MySQL存储过程的创建及调用

    阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的“脚本”     1.创建存储过程     2.调用存储过程     3.存储过程体     4.语句块标签 存储过程的参数...一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。...一、存储过程的创建和调用   >存储过程就是具有名字的一段代码,用来完成一个特定的功能。   >创建的存储过程保存在数据库的数据字典中。...from TENNIS.PLAYERS; mysql> create table MATCHES as select * from TENNIS.MATCHES; 示例:创建一个存储过程,删除给定球员参加的所有比赛...> delimiter ;  #将语句的结束符号恢复为分号 解析:   默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀;   在定义过程时

    3.3K20

    MySQL存储过程创建与使用

    3.1.创建无参数存储过程的语法及使用 无参数传递的存储过程语法如下 CREATE PROCEDURE 存储过程的名字() BEGIN 需要处理的业务SQL(相当于方法体); END; 调用无参存储过程语法如下...结果报错,报错说我SQL语法错误,但实际上检查几遍后发现并没有错误,尝试在Navicat中的命令行运行发现也没有错误可以创建,难道是DOS命令行的问题?...查看创建好的存储过程 show procedure status; 删除存储过程 DROP PROCEDURE 存储过程名称; ?...3.2.创建带参数(OUT)存储过程的语法及使用 带参数传递的存储过程语法如下,其中OUT表示的是返回的值,也就是后面在调用存储过程时如果选择的参数就会返回对应的结果,OUT相当于声明参数的格式一样...3.3.创建带参数(OUT和IN)存储过程的语法及使用 带参数传递的存储过程语法如下,其中OUT表示的是返回的值,也就是后面在调用存储过程时如果选择的参数就会返回对应的结果,OUT相当于声明参数的格式一样

    2.2K30

    mysql存储过程实例_sql存储过程创建实例详解

    一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。...存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 (2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。...关于MySQL的存储过程 存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。...好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。 3. MySQL存储过程的创建 (1)....格式 MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程参数[,…]]) [特性 …] 过程体 这里先举个例子: mysql> DELIMITER //

    2.6K20

    mysql创建定时执行存储过程任务

    Records of test_sche -- ---------------------------- INSERT INTO `test_sche` VALUES ('1', '188'); 2.创建一个存储过程...UPDATE test_sche SET counts=counts+1 WHERE id=1; END 注意,创建存储过程的时候,如果采用命令行的方式,需要先修改命令结束符,将分号改成其他的符号 --...设置分隔符为 '$$' ,mysql默认的语句分隔符为 ';' ,这样在后续的 create 到 end 这段代码都会看成是一条语句来执行 DELIMITER $$ //创建存储过程或者事件语句...//结束 $$ - 将语句分割符设置回 ';' DELIMITER ; 3.创建一个事件,并调用存储过程 CREATE DEFINER=`root`@`localhost` EVENT `test_sche_event...这里采用Navicat for mysql: 4.1创建存储过程 ? 4.2创建事件 ? ?

    5.3K70

    【MySQL】MySQL的事务

    理解事务 事务操作 事务的特性 事务的隔离级别  事务的隔离级别-操作  概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查 询、更新和删除数据。...什么是事务?  在MySQL中的事务(Transaction)是由存储引擎实现的,在MySQL中,只有InnoDB存储引擎才 支持事务。...事务操作 MySQL的事务操作主要有以下三种: 1、开启事务:Start Transaction 任何一条DML语句(insert、update、delete)执行,标志事务的开 启 命令:BEGIN...Transaction 失败的结束,将所有的DML语句操作历史记录全部清空 命 令:ROLLBACK 之前的所有SQL操作其实也有事务,只是MySQL自动帮我们完成的,每执行一条SQL时MySQL就...帮我们自动提交事务,因此如果想要手动控制事务,则必须关闭MySQL的事务自动提交。

    3.7K20

    Mysql-事务执行过程(两阶段提交)

    假设在 redolog 写完,binlog 还没有写完的时候, MySQL 进程异常重启,这时候 binlog 里面就没有记录这个语句。...所以在之后用 binlog 来恢复的时候就多了一个事务出来,与原库的值不同。...1、binlog(归档日志):将执行完的增删改SQL语句的具体操作记录到binlog中,MySQL 自带的日志模块2、undo_log(回滚日志):支持事务原子性,数据更改前的快照,可以用来回滚数据(记录旧数据...SQL 语句执行过程分为两类:1、查询过程:连接器 -> 查询缓存 -> 分析器 -> 优化器 -> 执行器 -> 存储引擎2、更新过程:连接器 -> 查询缓存 -> 分析器 -> 优化器 -> 执行器...5、执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成。

    81511

    1.Mysql 事务处理过程

    源自https://dev.mysql.com/doc/internals/en 每个访问事务表 都会启动一个statement事务。如果语句成功,则提交statement事务。...在 autocommit  自动提交模式下,normal事务与statement事务等价。      由于MySQL支持可插拔存储引擎体系结构(PSEA),一次可能有多个事务引擎处于活动状态。...所以从 服务器 的角度来看,事务总是 分布式 的。每个引擎的事务状态在MYSQL中是独立的。为了提交事务,MySQL使用 两阶段提交(two-phase commit)协议。      ...---- 数据结构:       MySQL将其与事务相关的数据存储在 thd->transaction 中。...此外,MySQL中的每个DDL语句都以一个隐式的正常事务提交开始,因此没有任何内容需要修改。但是,CREATE TABLE。。SELECT,一些DDL语句会启动一个 新的 事务。

    1.2K30

    MySQL的事务

    事务就是要保证一组数据库操作,要么全部成功,要么全部失败,在MySQL中,事务支持是在引擎层实现的 优点:支持严格的ACID属性(原子性(atomicity,或称不可分割性)、一致性(consistency...一致性(consistency):在事务执行前后,数据库一致性没有被破坏 隔离性(isolation):数据库中的事务一般是并发的,隔离性是指并发的两个事务的执行互不干扰,一个事务不能看到其他事务运行过程的中间状态...A只能读取到了已经提交的事务,这就是读已提交 可重复读(Repeatable read):个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。...当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。...事务A 事务B 将n修改 n=1 读取到修改的数据 n=1 事务提交 事务B读取未提交的事务,这就是脏读 什么是不可重复读?

    74220

    MySQL InnoDB 事务实现过程相关内容的概述

    MySQL事务的实现涉及到redo和undo以及purge,redo是保证事务的原子性和持久性;undo是保证事务的一致性(一致性读和多版本并发控制);purge清理undo表空间 背景知识,对于Innodb...表中的行每一行包括: 6字节的事务ID(DB_TRX_ID)字段: 用来标识最近一次对本行记录做修改(INSERT|UPDATE)的事务的标识符, 即最后一次修改(INSERT|UPDATE)本行记录的事务...1,MySQL事务执行过程中,    对于undo log     对于update或者delete操作,每一行都保存了一个事务Id,修改事务Id为当前Session的事务id,      生成数据行事务之前的版本...,将当前行的回滚指针指向事务之前的版本。      ...),发生checkpoint的时候      也就是说,Redo Log Buffe的落盘并不一定是事务提交的时候才写入的,对于大事务,redo log是有可能逐步落盘的(2,3两点的影响) 2,事务的提交

    34610
    领券