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

MySQL事务部分回滚-回滚到指定保存「建议收藏」

我们可以在mysql事务处理过程中定义保存(SAVEPOINT),然后回滚到指定的保存前的状态。 定义保存,以及回滚到指定保存前状态的语法如下。...定义保存—SAVEPOINT 保存点名; 回滚到指定保存—ROLLBACK TO SAVEPOINT 保存点名: 下面演示将向表user中连续插入3条数据,在插入第2条数据的后面定义一个保存,最后看看能否回滚到此保存...事务开始 mysql> BEGIN; Query OK, 0 rows affected (0.00 sec) 3、向表user中插入2条数据 mysql> INSERT INTO user VALUES...test以后插入的记录没有显示了,即成功团滚到了定义保存test前的状态。...利用保存可以实现只提交事务中部分处理的功能。

2K30
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL事务知识盘点

本篇内容包括:MySQL 事务概念、MySQL 事务隔离级别以及MySQL 事务隔离的实现 一、MySQL 事务概念 一般来说, MySQL 事务都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事务的...读提交事务隔离级别是大多数流行数据库的默认事务隔离界别,比如 Oracle,但是不是 MySQL 的默认隔离界别。...要说明的是,当你在 MySQL 中测试幻读的时候,并不会出现上图的结果,幻读并没有发生,MySQL 的可重复读隔离级别其实解决了幻读问题 6、串行化 串行化是4种事务隔离级别中隔离效果最好的,解决了脏读...对于一个快照来说,它能够读到那些版本数据,要遵循以下规则: 当前事务内的更新,可以读到; 版本未提交,不能读到; 版本已提交,但是却在快照创建后提交的,不能读到; 版本已提交,且是在快照创建前提交的,可以读到...还是要强调,两者主要的区别就是在快照的创建上,可重复读仅在事务开始是创建一次,而读提交每次执行语句的时候都要重新创建一次。 2、并发写问题 存在这的情况,两个事务,对同一条数据做修改。

31420

MySql 三大知识——索引、锁、事务

注意:小表使用全表扫描更快,中大表才使用索引。超级大表索引基本无效。...4、复合索引:将多个列组合在一起创建索引,可以覆盖多个列。 5、外键索引:只有InnoDB类型的表才可以使用外键索引,保证数据的一致性、完整性和实现级联操作。...如下图所示: 我们看到,B+ Tree 将所有的 data 数据都保存到了叶子节点中,非也子节点只保存索引和指针。...一张经典的图: 这里有个注意,关于幻读,在数据库规范里,RR 级别会导致幻读,但是,由于 Mysql 的优化,MySql 的 RR 级别不会导致幻读:在使用默认的 select 时,MySql 使用...原理剖析: RU 发生脏读的原因:RU 原理是对每个更新语句的行记录进行加锁,而不是对整个事务进行加锁,所以会发生脏读。而 RC 和 RR 会对整个事务加锁。

67920

MySql 三大知识——索引、锁、事务

注意:小表使用全表扫描更快,中大表才使用索引。超级大表索引基本无效。...4、复合索引:将多个列组合在一起创建索引,可以覆盖多个列。 5、外键索引:只有InnoDB类型的表才可以使用外键索引,保证数据的一致性、完整性和实现级联操作。...我们看到,B+ Tree 将所有的 data 数据都保存到了叶子节点中,非也子节点只保存索引和指针。 我们假设一个非页子节点是 16kb,每个索引,即主键是 bigint,即 8b,指针为 8b。...这里有个注意,关于幻读,在数据库规范里,RR 级别会导致幻读,但是,由于 Mysql 的优化,MySql 的 RR 级别不会导致幻读:在使用默认的 select 时,MySql 使用 MVCC 机制保证不会幻读...原理剖析: RU 发生脏读的原因:RU 原理是对每个更新语句的行记录进行加锁,而不是对整个事务进行加锁,所以会发生脏读。而 RC 和 RR 会对整个事务加锁。

87140

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

8510

MySQL 事务

**insert、update、delete**),现在 **MySQL** 中有 **InnoDB & NDB** 存储引擎支持事务。...MySQL InnoDB 中对隔离级别的支持 在 **MySQL** 中的 **InnoDB** 存储引擎支持的隔离级别与 **SQL92** 定义的基本一致,隔离级别越高,事务的并发度就越低。...而且在 **InnoDB** 存储引擎为每行记录都实现了两个隐藏字段对快照的创建时间与保证读取到的是快照而不是最新的数据问题解决: **DB_TRX_ID**:表示事务 ID(**6 byte...**),在插入或更新行的最后一个事务事务 **ID**,该 **ID** 是自动递增的;也可以理解为创建版本号,当数据新增或修改为新数据时就记录当前的事务 **ID**。...user VALUES ( NULL, 'Sky' ); -- 提交事务 COMMIT; 此时的数据中的创建版本是当前的事务 **ID**,删除版本为空; idnameDB_TRX_IDDB_ROLL_PTR1John1undefined2Sky1undefined

2.9K20

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

2.4K10

Mysql事务

作用不同,redo log是用于crash recovery,保证MySQL宕机也不会影响持久性;binlog是用于point-in-time recovery,保证服务器可以基于时间恢复数据,此外binlog...隔离性要求同一时刻只能有一个事务对数据库进行写操作。InnoDB通过锁机制来保证这一。...RC 与 RR的区别 RC与RR一样,都使用了MVCC RR在事务开始的时候后第一次执行select前就创建ReadView,直到事物提交都不会再创建。...RR可以解决脏度,不可重复读,幻读 RC每次执行select都会创建一个ReadView,因此如果事物A第一次select之后,事务B对数据进行了修改并提交,那么事务A第二次select时会重新建立ReadView...=1,balance=300id=2,balance=300 T6 commit; 出现了幻读问题 RR模式下 日志中记录的是:先commit的记录在前面,后commit的记录在后面,与执行时间无关

1.7K10

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

2.2K40

MySQL·事务

MySQL 默认采用自动提交模式,对于单条 SQL 语句,数据库系统自动将其作为一个事务执行,这种事务被称为隐式事务。...COMMIT 是指提交事务,即试图把事务内的所有 SQL 所做的修改永久保存。如果 COMMIT 语句执行失败了,整个事务也会失败。...分别开启两个 MySQL 客户端连接,按顺序依次执行事务 A 和事务 B: 时刻 事务 A 事务 B 1 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED...分别开启两个 MySQL 客户端连接,按顺序依次执行事务 A 和事务 B: 时刻 事务 A 事务 B 1 SET TRANSACTION ISOLATION LEVEL READ COMMITTED;...分别开启两个 MySQL 客户端连接,按顺序依次执行事务 A 和事务 B: 时刻 事务 A 事务 B 1 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

1.8K10

MySQL事务

我们开启另一个终端同时也启动一个事务: 首先我们当前的表是空的,我们以左边的终端为主,我们先创建一个保存 s1,对应的语句为 savepoint s1;;然后我们往表里插入一个数据;接着再创建一个保存...s2,然后再插入一个数据,如下图: 然后我们在另一个终端查看该表,是可以看见另一个终端插入的数据的: 上面所有的创建保存、插入数据的操作都是一个事务,那么我们操作失误了,想要撤回 Mike 的数据,...我们就可以定向地回滚,可以回滚到指定的位置,例如我们想撤回 Mike 的数据,我们回滚到 s2 的保存即可,对应的语句为:rollback to s2;,此时我们再从另一个终端查看该表时,就会发现 Mike...事务操作注意事项 如果没有设置保存,也可以回滚,只能回滚到事务的开始。...直接使用 rollback (前提是事务还没有提交); 如果一个事务被提交了(commit),则不可以回退(rollback); 可以选择回退到哪个保存; InnoDB 支持事务, MyISAM 不支持事务

9510

Mysql事务

事务是一组被视为单个逻辑单元的操作,这些操作要么全部执行成功,要么全部回滚。在数据库中,事务是确保数据完整性和一致性的重要机制。以下是关于事务的一些基本概念和用法。 事务是什么?...持久性(Durability):事务执行后,对数据库的修改应该是永久性的。 事务的语法 Mysql 中使用 START TRANSACTION 和 COMMIT 或 ROLLBACK 语句来控制事务。...事务有三种状态: 活动状态:这是事务的起始状态,表示事务正在执行中。...在此状态下,事务已经执行完毕,但是还没有被提交。在这个状态下,数据库引擎将会等待用户提交事务或者回滚事务的操作。...Mysql 支持四种隔离级别: 读未提交(READ UNCOMMITTED):这个隔离级别最宽松,允许事务读取其他事务未提交的数据。

14410

MySQL事务

目录: 事务四大特性 数据库的并发问题 数据库事务的隔离性 隔离级别 设置隔离级别 隐式事务 显式事务 事务四大特性 原子性 原子性是指事务是最小单位,不可分割,事务中的所有操作要么全部成功,...隔离级别 一个事务与其他事务隔离的程度称为隔离级别,数据库中规定了4种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性越好,但是并发越差 四种隔离级别 MySQL支持4种隔离级别...committed,serializable,默认是同read committed; SQL Server 支持4种隔离级别,默认使用read committed隔离级别; 设置隔离级别 每次启动一个mysql...默认情况下,MySQL,SQL Server,Oracle开启了自动提交的事务。...查看事务: show variables like 'autocommit'; 显式事务 显式事务是需要手动开启事务,并且提交事务的。 在使用显式事务前必须将隐式事务改为显式事务

2.2K10

MySQL事务

隔离性:一个事物在最终提交之前,数据的改变对其他事务是不可见的。 持久性:事务的最终操作结果能被持久保存MySQL事务 接下来我们介绍MySQL中的事务是如何保证ACID特性的。...MySQL对数据的变更操作总是会记录undo log, undo log中记录了一条数据被修改的链条,当需要执行回滚操作时,根据对应的事务ID,找到回滚对数据执行恢复操作。...如果执行commit的话,MySQL把最终结果刷到磁盘中。为了保证事务执行中,异常宕机导致事务仍可回滚,undo log的数据也是会被持久化到磁盘的。...下面我们主要介绍下,事务可重复读的实现方式。 在可重复读隔离级别下,事务启动时,会给数据创建一个“视图”,这里说视图并不是物理存在的,而是逻辑上的快照。...这里很容易理解,因为我们开启了事务创建了视图,id=1的记录虽然在事务二中被修改为100了,但是在事务一仍然可以根据trx_id和undo log中的“链条”找到自己当前trx_id对应的id=1记录的值

2.1K20

MySQL事务

什么是事务事务就是保证一组数据库操作要么全部成功,要么全部失败。MySQL中,事务的支持是在引擎层实现的。...200条,此时就产生了幻读问题 MySQL事务隔离级别 读未提交:一个事务还未提交,它的变更可以被其他事务看到 读提交:一个事务提交以后,它的变更才可以被其他事务看到 可重复读:一个事务执行过程中看到的数据始终保持和事务启动时看到的数据一致...其他隔离级别的实现是通过创建视图的方式来实现的,在访问时以视图的逻辑结果为准,只不过每种隔离级别创建视图的时机不同: 读提交:视图是在每个SQL语句开始执行的时候创建 可重复读:视图是事务启动的时候创建...关于MVCC的详细细节我们在后续了解完锁以后一起说,这样update语句的所有操作基本就全了(锁+事务+日志)。 MySQL的回滚日志什么时候删除?...因此如果系统中存在过多的长事务,会导致数据库存储空间增加迅速,并且也会占用锁资源,将有可能拖垮整个库。 MySQL如何启动事务? 1.set autocommit=1; 该方式下事务会自动提交。

78510

MySQL事务

4.3、事务提交步骤 客户端连接上服务器端,创建连接同时创建当前用户的临时事务日志文件。 开启事务,改变原有的操作机制(所有的操作都会先写入临时日志文件)。...事务的提交或回滚,提交:同步临时日志文件中的SQL操作结果到数据库表;回滚:清除临时日志文件 5、事务回滚 我们可以在mysql事务处理过程中定义保存(SAVEPOINT),然后回滚到指定的保存前的状态...定义保存,以及回滚到指定保存前状态的语法如下: 格式: savepoint 保存点名; #定义保存 rollback to savepoint 保存点名; #回滚到指定保存 或 rollback...向表中插入二条件记录 设置保存保存的名字为:insert_point 向表中插入二条件记录 回到保存:insert_point mysql> start transaction; Query...zhangsan | zhangsan | | 2 | lisi | lisi | +----+----------+----------+ 2 行于数据集 (0.01 秒) 注意: 设置保存可以让我们在失败的时候回到保存

4.2K10

Mysql事务

事务 简单来说,事务就是操作一系列事件,要么全部完成,要么全部不完成。...特性(ACID) 原子性:一系列事件,要么全部完成,要么全部不完成 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失...账号2 人民币50元 public static void main(String[] args) throws SQLException { String url = "jdbc:mysql...,不可重复读,虚读 Serializable隔离级别下的事务具有最高的安全性,但是,由于事务是串行执行,所以效率会大大下降 建议细看:事务隔离级别的图文 脏读:一个事务读取到另外一个事务未提交的数据...丢失修改:两个事务同时访问数据,第一个修改数据后,第二个也修改数据,导致第一个修改数据丢失 不可重复读:第一个事务读取到数据后,另外一个事务修改数据并提交后第一个事务再次读取,第一个事务两次读取的数据不一样

1.6K20

MySQL 事务

读取数据事务开始的时候,MySQL事务创建了快照,也就是在事务内查询的数据都是快照版本,这样就可以保证数据的一致性。 那么快照又是如何实现的呢?...小伙手撕MySQL事务,发生了什么? MVCC 的查找规则1:只能查找创建时间小于等于当前事务 ID 的数据 小伙手撕MySQL事务,发生了什么?...事务5,尝试修改数据 小伙手撕MySQL事务,发生了什么? 此时回到事务2再次查询数据 小伙手撕MySQL事务,发生了什么?...按照查找规则:只能查找创建时间小于等于当前事务 ID 的数据,和删除时间大于当前事 务 ID 的行(或未删除)。...解释:id为1的数据删除版本大于当前事务2,创建版本小于事务2,依然可以查到, id为2的数据创建版本为1的数据,小于事务2,删除版本大于事务2,可以查到 id为3的数据创建版本为3大于事务2,查不到;

1.7K40

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券