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

mysql如何启动事务

基础概念

MySQL中的事务是一组原子性的SQL查询,或者说一个独立的工作单元。如果组内的所有语句都能成功应用到数据库,那么事务将被提交(COMMIT),否则整个事务将被回滚(ROLLBACK),确保数据库状态的一致性。

启动事务

在MySQL中,可以通过以下几种方式启动事务:

  1. 显式启动事务
  2. 显式启动事务
  3. 或者使用BEGIN语句:
  4. 或者使用BEGIN语句:
  5. 隐式启动事务: 设置自动提交为OFF,这样每个SQL语句都会被视为一个事务的一部分,直到显式提交或回滚。
  6. 隐式启动事务: 设置自动提交为OFF,这样每个SQL语句都会被视为一个事务的一部分,直到显式提交或回滚。
  7. 使用存储过程: 在存储过程中,可以使用BEGIN ... END;块来定义事务。

相关优势

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

类型

MySQL支持以下几种事务隔离级别:

  1. READ UNCOMMITTED
  2. READ COMMITTED
  3. REPEATABLE READ(MySQL默认隔离级别)
  4. SERIALIZABLE

应用场景

事务广泛应用于需要保证数据一致性的场景,例如:

  • 银行转账
  • 订单处理
  • 库存管理

常见问题及解决方法

问题:事务没有回滚

原因:可能是由于没有正确设置回滚点,或者在事务中没有遇到错误。

解决方法

代码语言:txt
复制
START TRANSACTION;
-- 执行SQL语句
-- ...
IF error THEN
    ROLLBACK;
ELSE
    COMMIT;
END IF;

问题:事务隔离级别设置不当

原因:不同的隔离级别可能导致脏读、不可重复读或幻读等问题。

解决方法

代码语言:txt
复制
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION;
-- 执行SQL语句
-- ...
COMMIT;

参考链接

通过以上信息,您应该能够理解MySQL事务的基本概念、启动方式、优势、类型、应用场景以及常见问题的解决方法。

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

相关·内容

  • 什么是事务?MySQL如何支持事务?

    什么是事务? 事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。程序和事务是两个不同的概念。一般而言:一段程序中可能包含多个事务。...(3)隔离性:各个事务的执行互不干扰,任意一个事务的内部操作对其他并发的事务,都是隔离的。也就是说:并发执行的事务之间不能看到对方的中间状态,并发执行的事务之间不能相互影响。...(4)持续性:持续性也称为持久性,指事务一旦提交,对数据所做的任何改变,都要记录到永久存储器中,通常是保存进物理数据库。(说白了就是一条道跑到黑) MySQL如何支持事务?...MYSQL的事务处理主要有两种方法 1.用begin,rollback,commit来实现     begin开始一个事务     rollback事务回滚        commit 事务确认   ...2.直接用set来改变mysql的自动提交模式           mysql默认是自动提交的,也就是你提交一个query,就直接执行!

    2.3K20

    mysql 事务隔离级别如何选择

    四个概念: 数据丢失、脏读、不可重复读、幻读 数据丢失,两个事务同时进行,一个成功一个失败,造成数据回滚,或者两个都成功造成数据覆盖 从这个概念,就可以看出事务隔离的必要性,如果没有的话很容易产生这个严重的问题...脏读:在一个事务里面,读取到另一个事务还没提交的数据 不可重复读:一个事务内两次读同一个数据,可能发生变化(一般指该数据事务期间被别的事务修改,理解对一条数据操作) 幻读:一个事务内两次查询数据不一致...(条件查询,理解多条数据,其他事务有新增或者删除) 事务隔离分为4个级别 1.read uncommit (读未提交),存在脏读、不可重复度问题、幻读 2.read commit (读已提交),存在不可重复读...、幻读 3.repeatable read(可重复读),存在幻读 4.serialable(串行化),没有上面的问题,但性能过低 mysql,默认使用 rr 级别,它通过 mvvc 解决可重复读问题 ,...通过 next-key 解决了幻读的问题,next-key 包含 记录锁和 间隙锁 关于 mysql 锁可以参考这篇文章 https://www.linuxidc.com/Linux/2018-11/

    1.7K20

    如何帮 MySQL 看住长事务和大事务风险

    在 MySQL 里,长事务经常会被低估。它不一定马上报错,也不一定立刻把 CPU 打满。很多时候,它只是安静地挂在那里:事务已经开始,SQL 也执行过了,但迟迟没有提交或回滚。...ChatDBA 会先找出“挂住”的事务ChatDBA 做 MySQL 长事务诊断时,会重点关注事务持续时间、所属会话、执行用户、来源主机、当前 SQL、是否持锁,以及它有没有继续阻塞其他会话。...大事务和长事务要一起看长事务有时只是时间拖得久,大事务则是一次做得多。但在真实的 MySQL 场景里,这两类问题经常会同时出现,而不是彼此独立。例如一次 INSERT INTO ......然后在对话框里直接输入长事务诊断需求即可,比如请检查当前 MySQL 是否存在长事务或大事务,列出事务持续时间、会话、执行 SQL、可能风险和处理建议。...如果回答里已经提到未提交风险、大事务压力或锁影响,就继续顺着上下文追问,让 ChatDBA 把这笔事务为什么危险、现在先动哪里最合适讲清楚。最后MySQL 长事务最麻烦的地方,往往就在于它会拖住别人。

    20010

    【说站】Mysql如何实现事务隔离

    Mysql如何实现事务隔离 1、每条记录在更新的时候都会同时记录一条回滚操作。 2、同一条记录在系统中可以存在多个版本,这就是数据库的多版本并发控制(MVCC)。...where age=20; -- return 0: 当前没有age=20的 2. update user set name=test where age=20; -- Affects 10 rows: 因为事务...B刚写入10条age=20的记录,而写操作是不受MVCC影响,能看到最新数据的,所以更新成功,而一旦操作成功,这些被操作的数据就会对当前事务可见 3. select count(1) from user... where age=20; -- return 10: 出现幻读 以上就是Mysql实现事务隔离的方法,希望对大家有所帮助。...更多mysql学习指路:MySQL 推荐操作系统:windows7系统、mysql5.8、DELL G3电脑

    78420

    MySQL是如何实现事务ACID的?

    (Durability)持久性: 一个事务被提交之后。对数据库中数据的改变是持久的,即使数据库发生故障。 接下来就介绍下,MySQL在innoDB引擎下是事务特性的 3隔离性 为什么要先说隔离性呢?...MySQL不同的隔离级别,可能存在的问题如下表 事务隔离级别 脏读 不可重复读 幻读 读未提交 可能 可能 可能 读已提交 不可能 可能 可能 可重复读 不可能 不可能 可能 序列化 不可能 不可能 不可能...MySQL中的锁从粒度上来说分为表锁、页锁、行锁。 表锁有意向共享锁(IS)、意向排他锁(IX)、自增锁等。...更新时,先改内存中的数据页,将更新操作写入redo log日志,此时redo log进入prepare状态,然后通知MySQL Server执行完了,随时可以提交,MySQL Server将更新的SQL...总结 MySQL事务应该大家都知道,但是实现原理可能就不是那么清楚,希望本文能对事务的了解有所帮助。 今天多学一点知识,明天就少说一句求人的话

    1.2K10

    MySQL 核心模块揭秘 | 04 期 | 终于要启动事务了

    启动事务 在《BEGIN 语句会马上启动事务吗?》...读事务 事务启动于执行第一条 SQL 语句时,如果第一条 SQL 语句是 select、update、delete,InnoDB 会以读事务的身份启动新事务。...读写事务 如果事务执行的第一条 SQL 语句是 insert,这个事务就会以读写事务的身份启动。 读写事务的启动过程,主要会做这几件事: 为用户普通表分配回滚段,用于写 Undo 日志。...内部事务 用户事务以什么身份启动,取决于执行的第一条 SQL 是什么。 和用户事务不一样,InnoDB 启动内部事务都是为了改变表中数据,所以,内部事务都是读写事务。...用户事务可能会读取、改变表中数据,根据执行的第一条 SQL 语句不同,以不同身份启动: 执行的第一条 SQL 语句是 select、update、delete,以读事务身份启动事务。

    38410

    MySQL是如何实现事务的ACID

    前言 最近在面试,有被问到,MySQL的InnoDB引擎是如何实现事务的,又或者说是如何实现ACID这几个特性的,当时没有答好,所以自己总结出来,记录一下。...虽然Buffer Pool为MySQL的读写提高了效率,但是却也带来了新的问题,那就是如果数据刚更新到Buffer Pool中还没来得及刷新到磁盘中时,MySQL突然宕机了,这就会导致数据丢失,造成事务的持久性无法保证了...对于隔离性的,我们要分两种情况进行讨论: 一个事务中的写操作对另一个事务中的写操作的影响; 一个事务中的写操作对另一个事务中的读操作的影响; 首先,事务间的写操作其实是靠MySQL的锁机制来实现隔离的...那么MVCC是如何保证读写隔离的呢?主要是通过快照读和当前读两个操作。...I隔离性:事务间的读写靠MySQL的锁机制来保证隔离,事务间的写操作靠MVCC机制(快照读、当前读)来保证隔离性。 C一致性:事务的最终目的,即需要数据库层面保证,又需要应用层面进行保证。

    1.8K10

    MySQL是如何实现事务ACID的?

    (Durability)持久性: 一个事务被提交之后。对数据库中数据的改变是持久的,即使数据库发生故障。 接下来就介绍下,MySQL在innoDB引擎下是事务特性的 3隔离性 为什么要先说隔离性呢?...MySQL不同的隔离级别,可能存在的问题如下表 事务隔离级别脏读不可重复读幻读读未提交可能可能可能读已提交不可能可能可能可重复读不可能不可能可能序列化不可能不可能不可能 那么不同的隔离级别是怎么保证隔离性呢...MySQL中的锁从粒度上来说分为表锁、页锁、行锁。 表锁有意向共享锁(IS)、意向排他锁(IX)、自增锁等。...MySQL 里经常说到的 WAL(Write-Ahead Logging) 技术 ,它的关键点就是先写日志,再写磁盘。...更新时,先改内存中的数据页,将更新操作写入redo log日志,此时redo log进入prepare状态,然后通知MySQL Server执行完了,随时可以提交,MySQL Server将更新的SQL

    1.4K20

    MySQL 事务

    在MySQL中,事务具有以下四个特性,通常称为ACID特性: 1.原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部失败。...在MySQL中,可以使用以下命令来控制事务: •START TRANSACTION; or BEGIN;:开始一个新的事务。•COMMIT;:提交当前事务,使事务中的所有修改生效。...事务并发 事务并发是指多个事务同时执行,这可能会导致以下问题: 1.丢失更新:当两个或多个事务同时对相同的数据进行更新时,最后提交的事务可能会覆盖之前提交的事务所做的修改,导致之前的更新丢失。...MySQL支持以下四种事务隔离级别: 1.未提交读(Read Uncommitted):允许一个事务读取另一个事务未提交的数据。这可能导致脏读、不可重复读、幻读。...查看、设置MySQL事务隔离级别 -- 查看事务隔离级别 -- 使用系统变量查询 SELECT @@transaction_isolation; -- 5.7.20之前 SHOW VARIABLES

    1.1K10

    Mysql事务

    MySQL数据库,mysql -uroot -p123456进行MySQL登录,在完成TCP握手之后,连接器会根据输入的用户名和密码验证身份,若错误会提示:Access denied for user,...MySQL执行流程 提交和回滚 MySQL事务是如下操作的 begin; -- 或者start transaction -- 1条或者n条sql语句 commit; begin或start transaction...特殊操作 在MySQL中,存在一些特殊的命令,如果在事务中执行了这些命令,会马上强制执行commit提交事务;如DDL语句(create table/drop table/alter table)、lock...只有同时满足ACID才是事务;但是在各大数据库厂商实现中,完全满足ACID的少之又少,例如MySQL的NDB Cluster事务不满足持久性和隔离性;InnoDB默认事务隔离级别是可重复读,不满足隔离性...相关文章 Mysql中的索引 Mysql通过binlog恢复数据 Mysql之binlog三种模式 Mysql中的binlog入门介绍

    2.7K10

    mysql 事务

    1)查看哪些引擎支持事务: SQL: Show engines; 2)查看表引擎类型: Show create table table_name; 3)查看是否自动提交: show variables...like ‘%autocommit%’; 4)事务开始的方法: a) mysql_autocommit(0); 如果程序在此处coredump,请检查是否connect db b) SQL:Set autocommit...=0; c) Begin work; d) Start transaction; 5)事务结束的方法: a) SQL:Commit/rollback b) Mysql_commit/mysqlrollback...c) 隐式事务,参考http://blog.csdn.net/blues1021/article/details/6329190 并发事务: 锁机制: 乐观锁:通过where条件控制、通过version...字段或自定义字段的值控制; update影响的行数:mysql_affected_rows的返回值,可根据它决定事务是否终止 悲观锁=排他锁 Select  * from table for update

    3.4K10

    MySQL事务

    几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致 隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的 持久性(Durability):...对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障 提交 默认隔离级别可重复读,若事务级别为读已提交,则终端二不commit的情况下可以读取到终端一的数据。...### 终端一 begin; 开启 insert into students (sname) value ("sss"); commit; 只有commit才表示执行成功 ### 终端二 mysql>...insert into students (sname) value ("kksk"); 测试语句 ### 终端二 mysql> select * from students; +----+-----...-+ | id | sname | +----+-------+ | 1 | Gage | | 2 | sss | | 4 | kksk | +----+-------+ 查看隔离级别 mysql

    3K40

    MySQL事务

    什么是事务? 事务就是保证一组数据库操作要么全部成功,要么全部失败。MySQL中,事务的支持是在引擎层实现的。...200条,此时就产生了幻读问题 MySQL事务隔离级别 读未提交:一个事务还未提交,它的变更可以被其他事务看到 读提交:一个事务提交以后,它的变更才可以被其他事务看到 可重复读:一个事务执行过程中看到的数据始终保持和事务启动时看到的数据一致...每一种隔离级别可以解决对应的问题,如下: 脏读 不可重复读 幻读 读未提交 未解决 未解决 未解决 读提交 解决 未解决 未解决 可重复读 解决 解决 未解决 串行化 解决 解决 解决 MySQL事务隔离级别如何实现...因此如果系统中存在过多的长事务,会导致数据库存储空间增加迅速,并且也会占用锁资源,将有可能拖垮整个库。 MySQL如何启动事务? 1.set autocommit=1; 该方式下事务会自动提交。...-- 显示开启事务 begin/start transaction ; -- 提交事务 commit; -- 提交事务并自动启动下一个事务 -- 对于事务频繁使用的系统,可以减少begin/start

    1.5K10

    MySQL(事务)

    目录: 事务四大特性 数据库的并发问题 数据库事务的隔离性 隔离级别 设置隔离级别 隐式事务 显式事务 事务四大特性 原子性 原子性是指事务是最小单位,不可分割,事务中的所有操作要么全部成功,...隔离级别 一个事务与其他事务隔离的程度称为隔离级别,数据库中规定了4种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性越好,但是并发越差 四种隔离级别 MySQL支持4种隔离级别...read committed,serializable,默认是同read committed; SQL Server 支持4种隔离级别,默认使用read committed隔离级别; 设置隔离级别 每次启动一个...mysql程序时,都会获取一个单独的数据库连接,每个连接都有一个全局变量用于记录数据库当前的隔离级别@@transation_isolation 查看当前连接的数据库隔离级别: SELECT @@transaction_isolation...默认情况下,MySQL,SQL Server,Oracle开启了自动提交的事务。

    2.8K10
    领券