MySQL的savepoint分析

写在前面

本文看下MySQL的savepoint相关内容。

1:什么是savepoint

savepoint是事务中一个概念,允许在事务执行的过程中暂存事务执行到当前所产生的修改,这样当我们需要回滚事务时就可以选择回滚到某个保存点,而不用回滚整个事务。语法格式如下:

复制代码
生成一个savepoint:
    SAVEPOINT the_savepoint_name
回滚事务到某个savepoint:
    ROLLBACK [WORK] TO [SAVEPOINT] the_savepoint_name
释放暂存点:
	RELEASE SAVEPOINT the_savepoint_name

2:实例

如下表:

java 复制代码
mysql> select * from words where id in (1,2);
+----+------+
| id | word |
+----+------+
|  1 | aaaa |
|  2 | aaab |
+----+------+
2 rows in set (0.00 sec)

接下来我们分别对id为1,2的word都拼加字符串hi,并分别生成保存点,最终回滚到id为1的修改保存点,并提交事务,因此最终只有id=1的word会追加hi成功,操作如下:

复制代码
mysql> start transaction with consistent snapshot;
Query OK, 0 rows affected (0.00 sec)

mysql> update words set word=concat(word,'hi') where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> savepoint sp_id_1; // 生成第一个暂存点
Query OK, 0 rows affected (0.00 sec)

mysql> update words set word=concat(word,'hi') where id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> savepoint sp_id_2; // 生成第二个暂存点
Query OK, 0 rows affected (0.00 sec)

mysql> rollback to savepoint sp_id_1; // 回滚到第一个暂存点,则第一个暂存点之后的所有修改都会被回滚,但第一个暂存点之前的修改回被保留
Query OK, 0 rows affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.06 sec)

mysql> select * from words where id in (1,2); 
+----+--------+
| id | word   |
+----+--------+
|  1 | aaaahi |
|  2 | aaab   |
+----+--------+
2 rows in set (0.00 sec)

可以看到最终只要id=1的word值成功追加了hi

写在后面

参考文章列表

MySQL 基础 ------------ SAVEPOINT 的应用

相关推荐
电星托马斯8 分钟前
Linux的那些基础常用命令汇总
linux·运维·服务器·数据库·笔记·centos·debian
程序猿阿伟10 分钟前
《 Scikit-learn与MySQL的深度协同:构建智能数据生态系统的架构哲学》
mysql·架构·scikit-learn
码熔burning23 分钟前
Redis主从复制:告别单身Redis!
数据库·redis·缓存·docker·主从复制
a未来永远是个未知数30 分钟前
redis数据迁移之通过redis-dump镜像
数据库·redis·缓存
努力搬砖的咸鱼33 分钟前
QTSql全解析:从连接到查询的数据库集成指南
数据库·qt
神洛华1 小时前
PowerBI 之DAX 1:DAX概述、逻辑、筛选函数
数据库·redis·powerbi
梦三辰2 小时前
超详细解读:数据库MVCC机制
数据库·mysql·mvcc·快照
hxung3 小时前
如何保证mysql和redis的数据一致性
java·数据库·redis·mysql
涛思数据(TDengine)3 小时前
时序数据库 TDengine Cloud 私有连接实战指南:4步实现数据安全传输与成本优化
数据库·时序数据库·tdengine
翻滚吧键盘3 小时前
debian12 mysql完全卸载
数据库·mysql