首页
学习
活动
专区
工具
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...| 3 | one | 0 | | | 4 | two | 0 | | | 5 | three | 0 | | +—–+———-+—–+——+ 5 rows in set (0.02 sec) 6、滚到保存点...| 4 | two | 0 | | +—–+———-+—–+——+ 4 rows in set (0.00 sec) 我们可以看到保存点test以后插入的记录没有显示了,即成功团滚到了定义保存点

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

MySQL安全----日志管理(三)

简介 除了前两篇的日志学习,MySQL还有两个特殊的日志----滚日志(undo log)和重做日志(redo log),统称事务日志。 事务日志,顾名思义是为了保障数据的原子性和一致性。...详解 MySQL数据存储 MySQL中数据是以页为单位,查询一条记录,会从硬盘把一页的数据加载出来,加载出来的数据叫数据页,会放入到 Buffer Pool 中。...如果执行过程中遇到异常的话,可以利用回滚日志中的信息将数据滚到修改之前。并且,滚日志会先于数据持久化到磁盘上。...这样就保证了即使遇到数据库突然宕机等情况,当用户再次启动数据库的时候,数据库还能够通过查询滚日志来回滚将之前未完成的事务。...结语 滚日志是记录旧值,重做日志是记录新值。例如要将条数据由 0 更新成 1 ,滚日志会记录旧值 0 ,重做日志会记录新值 1 。

38930

拨开云雾见天日:剖析单机事务原理

同一时刻,可能有多个应用程序同时向数据库发送读写请求,所以对于数据库管理系统(如:MySQL、Oracle等)来说,一个事务包含一系列事务单元。...商品表要建立一个基于列的索引 从数据库读取一行记录 想数据库中写入一行记录,同时更新这行记录 删除整张表 … 二、事务的原子性(Atomicity) 事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行...,然而B也要进行滚,就会发现数据本身已经无法滚到最初的状态去了。...原子性的语义只保证数据库记录了滚段,如上面的undo日志,它可以保证在事务单元执行出现异常时,可根据滚段(undo日志)滚到之前的版本。...数据库为了支持事务,在每个写事务(更新数据)时,都会记录undo log以便在事务执行出现异常时可以滚到事务初始的状态,就如同这样: ?

63010

怎么避免从删库到跑路 -- 详解 mysql binlog 的配置与使用

当然不会了,通常对于线上数据库,我们都会定时冷备,dump 导出数据库的全量备份,并且保留一段时间内的所有修改日志,进而实现在必要时滚到这段时间内的任何一秒。...因此,基于 binlog,我们可以看到每一次对数据库的修改是在何时以何种方式执行的,从而可以实现对任意条操作的滚,当然。...众所周知,mysql 的主从同步机制也是依赖 binlog 来实现的,binlog 让从数据库可以精准还原主库的每一个操作。...通过 binlog 定点还原数据库 我们开启 binlog 一个十分重要的目的是为了能够随时还原和滚到近期某个时间节点。...-u user -p password 于是,数据库成功滚到 2019-07-02 15:27:48 时刻

60020

MySQL事务隔离级别

如果执行过程中出错,需要回滚到之前的状态。 一致性 (Consistency):事务完成前后,数据库的完整性约束不能被破环。例如A给B转账,不能A扣了钱,B却没有收到钱,此时的金额总数也不一致。...持久性 (Durability):事务完成之后,数据的更改将持久化到数据库中,不可滚。...MySQL默认级别为:可重复读。...3、脏读、可重复读、不可重复读与幻读 脏读:在一个事务中读到了另一个事务修改但未提交的数据,这些数据可能会滚即最终可能不会持久化到数据库中。简言之,读到了并不一定最终存在的数据。...MySQL在其默认隔离级别即可重复读状态下已经解决了幻读问题。 不要混淆幻读与不可重复读,两者极其相似。但是前者针对INSERT操作,后者针对UPDATE操作。

1.3K20

MYSQL innodb_deadlock_detect 打开数据库性能低,与事务

最近在重新整理MYSQL 8的MY.CNF 的配置, 在和组员讨论的试试,我们的MYSQL DBA 提出一个问题, innodb_deadlock_detect 和 innodb_rollback_on_timeout..., 以及事务滚的问题....时间和精力的关系不想在弄下去,检测死锁的确是比不检测要耗费性能是一定的, 篇关于这个参数打开后的性能测试的帖子中提到 lock_detect_recursive function 是性能的罪魁祸首....那么下面的连锁的问题就来了, 如果死锁,其中一个事务滚, 则根据MYSQL 默认的原则,只滚最后的一条语句,而不是将所有的事务都回滚....说到最后我们来捋一捋, 关于死锁以及事务滚的MYSQL的配置我们是怎么做的 1 innodb_deadlock_detect = off 2 innodb_lock_wait_timeout =

1.4K20

JDBC中事务

事务遵循ACID原则: 原子性:要么全部完成,要么都不完成 一致性:总数不变 隔离性:多个进程互不干扰 持久性:一旦提交不可逆,即持久化到数据库 事务滚作用  假设现在有一个业务逻辑是 张三 给 李四...转账,张三在银行A发起了转账操作(此处我们假设银行使用mysql进行数据存储),此时数据库需要完成两个操作,第一个操作是从张三的余额当中扣除对应的金额,第二个操作是给李四的账户余额中增加余额。  ...JDBC Savepoint帮我们在事务中创建检查点(checkpoint),这样就可以滚到指定点。当事务提交或者整个事务滚后,为事务产生的任何保存点都会自动释放并变为无效。...把事务滚到一个保存点,会使其他所有保存点自动释放并变为无效。...rolled back successfully"); } else { //如果不为空,即代表设置了检查点 //滚到指定位置

1.5K20

SQL操作二

滚(rollback) 1.4.4. 滚点(savepoint) 1.4.5. 总结 1.5. SQL分类 1.5.1. 数据库定义语言 DDL 1.5.2. 数据操纵语言 DML 1.5.3....mysql接收到数据是的解码格式设置为gbk,这个位置的gbk和数据库还有表的utf8没有关系 在windows系统中修改mysql默认的数据库编码,找到安装文件中的my.ini的配置文件 在里面添加时如下代码...滚(rollback) 当你之前的操作没有提交的话,那么你使用rollback这个命令,那么就会滚到初始状态 滚点(savepoint) 前提是没有设置了自动提交,才能滚到保存点 savepint...s1(标识); : 设置保存点 滚到保存点,那么保存点之前的操作都是存在的,一旦提交之后就会执行保存点之前的操作。...begin 起始点 savepoint s(标识) 设置滚点 commit 提交 rollback 滚 rollback to … 滚到指定的滚点 SQL分类 数据库定义语言 DDL Data

65220

MySQL 事务和 MVCC 机制

如果我们写了几条语句之后发现前面条语句写错了,可以使用下面这个语句将数据库恢复到执行事务之前的样子: mysql> rollback; 保存点 savepoint 是在数据库事务处理中实现子事务(...事务可以滚到 savepoint 而不影响 savepoint 创建前的变化, 不需要放弃整个事务。一个事务中可以有多个savepoint。...savepoint savepoint_name; //声明一个 savepoin rollback to savepoint_name; // 滚到savepoint release savepoint...赵七 | 3000 | | 6 | 王八 | 7000 | +------+--------+---------+ 6 rows in set (0.01 sec) # 滚到保存点...假设一个值从 1 被按顺序改成了 2、3、4,在滚日志里面就会有类似下面的记录。 ? 当前值是 4,但是在查询这条记录的时候,不同时刻启动的事务会有不同的 read-view。

45810

数据库事务

mysql> rollback; Query OK, 0 rows affected (0.00 sec) -- 7.再次查看滚后的数据,发现滚到执行之前的数据情况 mysql> select...1566283059762 1.3 事务的滚点和执行原理 什么是滚点 ---- 上面的操作,如果滚,直接回滚到事务开始前。...有时我们并不需要回滚到最开始的状态,可能只需要回滚到中间的某个位置,就可以设置滚点 语法 ---- 滚点的操作语句 语句 设置滚点 savepoint 名字 回到滚点 rollback to 名字...) -- 7.再次查看滚后的数据,发现滚到执行之前的数据情况 mysql> select * from account; +----+------+---------+ | id | name |...将数据滚到 滚点 point_one 处 mysql> rollback to point_one; Query OK, 0 rows affected (0.00 sec) -- 9.

69820

MySQL事务管理

正如我们上面所说,一个 MySQL 数据库,可不止你一个事务在运行,同一时刻,甚至有大量的请求被包装成事务,在向 MySQL 服务器发起事务处理请求。...同理,如果我们想回滚到s2,滚到s1,都是可以的。...(select有特殊情况,因为 MySQL 有 MVCC ) 从上面的例子,我们能看到事务本身的原子性(滚),持久性(commit) 事务操作注意事项 如果没有设置保存点,也可以滚,只能滚到事务的开始...事务在执行过程中如果发生错误,则需要自动滚到事务最开始的状态,就像这个事务从来没有执行过一样,即一致性需要原子性来保证。...因此,只有当条记录的最新版本已经修改并提交,并且此时没有其他事务与该记录的历史版本有关了,这时该记录在undo log中的版本链才可以被清除。

24130

MySQL中的事务处理:维护数据完整性的必要手段

MySQL中的事务处理是确保数据完整性和一致性的重要手段。事务是一组数据库操作的逻辑单元,要么全部成功执行,要么全部滚到初始状态。...在并发环境下,多个用户可能同时访问和修改数据库,通过使用事务可以保证数据操作的正确性和可靠性。下面我将详细介绍MySQL中事务的概念、特性、隔离级别以及如何使用事务来维护数据的完整性。...一、事务的概念和特性 1、事务是一组数据库操作的逻辑单元,要么全部成功执行,要么全部滚到初始状态。...2、提交事务:使用COMMIT语句提交事务,将事务中的修改应用到数据库,并释放相关资源。 3、滚事务:使用ROLLBACK语句滚事务,将事务中的修改撤销到初始状态。...6、分布式事务:对于分布式系统,使用分布式事务管理机制,确保不同数据库之间的一致性和可靠性。 MySQL中的事务处理是确保数据完整性和一致性的重要手段。

11910

MySQL数据库——事务的操作(开启、滚、提交)、特征、隔离级别基础总结

1.1 事务的操作 开启事务:start transaction; 滚:rollback; 提交:commit; 【举例】:还是用这个A给B转账的例子,在SQLyog中进行模拟开启事务、滚、提交 -...2)发现错误后,执行滚操作,再次在窗口A和B中查询,数据都是1000,滚操作成功。...1.2 MySQL数据库的事务提交 1)事务提交的两种方式 自动提交:MySQL数据库默认是自动提交的,一条DML(增删改语句)会自动提交一次事务; 手动提交:需要先开启事务(START TRANSACTION...     【会产生的问题】:脏读、不可重复读、幻读 2)read committed:读已提交(Oracle默认)     【会产生的问题】:不可重复读、幻读 3)repeatable read:可重复读(MySQL...但是一般情况下不会修改数据库默认的隔离级别,只有在极特殊情况下才会做出修改已解决一些特殊问题。 数据库查询隔离级别:select  @@tx_isolation; ?

18.2K30

MySQL 的 crash-safe 原理解析

记录的是数据库中每个页的修改,而不是某一行或几行修改成怎样,可以用来恢复提交后的物理数据页(恢复数据页,且只能恢复到最后一次提交的位置,因为修改会覆盖之前的)。...3、归档日志 binlog binlog在MySQL的server层产生,不属于任何引擎,主要记录用户对数据库操作的SQL语句(除了查询语句)。...下面我们根据事务提交流程,在不同的阶段时刻,看看MySQL突然奔溃后,按照上述流程是如何恢复数据的。...;如果是完整的并且是prepare状态,则进一步判断对应的事务binlog是不是完整的,如果不完整则一样根据undo log进行滚; 时刻C(正在写binlog或者已经写完binlog并且落盘了,还没有开始...log滚,完整则重新commit redo log; 时刻D(正在commit redo log或者事务已经提交完的时候,还没有反馈成功给客户端的时候奔溃): 恢复后跟时刻C基本一样,都会对照redo

1.2K30

MySQL

MySQL锁有几类? 全局锁 表级锁 行锁 间隙锁(用来解决幻读,这个后面单独讲) 全局锁 什么是全局锁?...直接进入等待,直到超时,超时时间由参数innodb_lock_wait_timeout设置 发起死锁检测,发现死锁后,主动滚死锁链条中的某一个事务,让其他事务继续执行。...,在进入引擎之前让其排队,这样在InnoDB引擎内部可以避免大量的死锁检测工作(需要能够修改MySQL源码) 如果有中间件研发团队,也可以考虑使用中间件来实现并发度的控制 业务上对单行进行多行拆分,比如我们可以将一个相同的账户在数据库里面变成...1 show create table `test`; -- 开始导数据 -- 时刻2 select * from `test`; -- 时刻3 -- 滚到保存点,释放test表的MDL锁 rollback...to savepoint `sp`; -- 时刻4 DDL的binlog从主库传递到从库的上述4个时刻逻辑备份会有不同的表现: 如果在时刻1之前到达,没有影响,备份拿到的是DDL后的表结构 如果在时刻

1.5K10

消失的 100 万,炸了!

,那么该事务期间对数据库所做的修改将会被滚到没执行该事务之前的状态。...事务看起来感觉简单,但是要实现事务必须要遵守 4 个特性,分别如下: 原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节,而且事务在执行过程中发生错误,会被滚到事务开始前的状态...因为事务 A 是还没提交事务的,也就是它随时可能发生滚操作,如果在上面这种情况事务 A 发生了滚,那么事务 B 刚才得到的数据就是过期的数据,这种现象就被称为脏读。...,它的聚族索引记录中都包含下面两个隐藏列: trx_id,当一个事务对条聚族索引记录进行改动时,就会把该事务的事务 id 记录在 trx_id 隐藏列里; roll_pointer,每次对条聚族索引记录进行改动时...后续继续图解 MySQL,下次就讲 MySQL 各种锁。 争去早日搞出《图解 MySQL》PDF。

78790

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券