广告位联系
返回顶部
分享到

MySQL事务的SavePoint简介及操作

Mysql 来源:互联网 作者:佚名 发布时间:2023-01-09 00:29:06 人浏览
摘要

什么是SavePoint SavePoint是数据库事务中的一个概念, 可以将整个事务切割为不同的小事务, 可以选择将状态回滚到某个小事务发生时的样子, 语法 定义保存点的语法如下: 1 SAVEPOINT 保存

什么是SavePoint

SavePoint是数据库事务中的一个概念, 可以将整个事务切割为不同的小事务, 可以选择将状态回滚到某个小事务发生时的样子,

语法

定义保存点的语法如下:

1

SAVEPOINT 保存点的名称;

当我们想回滚到某个保存点时,可以使用下边的语句。

1

ROLLBACK [WORK] TO 保存点的名称

删除保存点

1

RELEASE SAVEPOINT 保存点名称;

重要操作

1

2

3

4

5

6

7

开启事务: begin

....DML语句....

设置保存点: savepoint 保存点名字

....DML语句....

设置保存点: savepoint 保存点名字2

....DML语句....

回滚保存点: rollback to 保存点名字2 (此时保存点2后面操作的状态都将回滚直保存点2时样子)

注意,回滚点无法随意跳转,例如上面,如果跳转到第一个保存点名字,就无法再到保存点名字2了,当事务整体提交、回滚时,保存点也随之释放。(一个事务中可以设置多少个保存点并无限制)

演示: 接下来用mysql演示一下,思路是向mysql insert三条数据, 每次insert设置一个保存点,在第三次insert后回滚到第一个保存点看下效果:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

// 开始查询空表

mysql> select * from t_x;

Empty set

  

// 开启事务

mysql> begin;

Query OK, 0 rows affected (0.01 sec)

  

// 插入第一条数据

mysql> insert into t_x value(1, '1');

Query OK, 1 row affected (0.01 sec)

 

// 设置保存点

mysql> savepoint a1;

Query OK, 0 rows affected (0.01 sec)

  

// 此时查询一条数据

mysql> select * from t_x;

+----+------+

| id | name |

+----+------+

|  1 | 1    |

+----+------+

1 row in set (0.01 sec)

 

// 插入第二条数据

mysql> insert into t_x value(2, '2');

Query OK, 1 row affected (0.01 sec)

 

// 设置保存点2

mysql> savepoint a2;

Query OK, 0 rows affected (0.01 sec)

 

// 查询两条数据

mysql> select * from t_x;

+----+------+

| id | name |

+----+------+

|  1 | 1    |

|  2 | 2    |

+----+------+

2 rows in set (0.01 sec)

 

// 插入第三条数据

mysql> insert into t_x value(3, '3');

Query OK, 1 row affected (0.01 sec)

 

// 共三条

mysql> select * from t_x;

+----+------+

| id | name |

+----+------+

|  1 | 1    |

|  2 | 2    |

|  3 | 3    |

+----+------+

3 rows in set (0.01 sec)

 

// 回滚到第一个保存点

mysql> rollback to a1;

Query OK, 0 rows affected (0.01 sec)

 

// 此时查询,只有第一个保存点时的一条数据

mysql> select * from t_x;

+----+------+

| id | name |

+----+------+

|  1 | 1    |

+----+------+

1 row in set (0.00 sec)

 

// 尝试回滚到第二个保存点, 出错

mysql> rollback to a2;

1305 - SAVEPOINT a2 does not exist

mysql>


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://juejin.cn/post/7185443855868100645
相关文章
  • MYSQL统计逗号分隔字段元素的个数
    写SQL的时候会遇到如下的问题,统计如下表中project_id字段中id的个数。 company_id project_id 77 94882,214880,94881,154882,94871,94879 140 2890,2872,3178,4314,
  • MySQL事务的SavePoint简介及操作
    什么是SavePoint SavePoint是数据库事务中的一个概念, 可以将整个事务切割为不同的小事务, 可以选择将状态回滚到某个小事务发生时的样子,
  • mysql查看表大小的方法介绍
    1.查看所有数据库容量大小 1 2 3 4 5 6 7 8 select table_schema as 数据库, sum(table_rows) as 记录数, sum(truncate(data_length/1024/1024, 2)) as 数据容量(MB), sum(
  • MySQL不用like+%实现模糊查询

    MySQL不用like+%实现模糊查询
    我们都知道 InnoDB 在模糊查询数据时使用 %xx 会导致索引失效,但有时需求就是如此,类似这样的需求还有很多,例如,搜索引擎需要根基用
  • SQL通用语法以及分类图文介绍
    MySQL的启动和连接数据模型 MySQL的启动和停止 1.services.msc 2.命令行启停 启动:net start mysql80 停止:net stop mysql80 (命令行窗口以管理员权限打
  • mysql开启各种日志的方法
    以下日志开启均在mysql5.7.32进行测试 general_log general_log支持热开启,热关闭。开启general_log会记录所有操作mysql命令,所以会产生大量文件,
  • Mysql备份的几种方法教程
    1. mysqldump mysqldump是mysql用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等
  • 深入了解MySQL中的慢查询
    一、什么是慢查询 什么是MySQL慢查询呢?其实就是查询的SQL语句耗费较长的时间。 具体耗费多久算慢查询呢?这其实因人而异,有些公司慢
  • MySQL中with rollup的用法及说明

    MySQL中with rollup的用法及说明
    MySQL with rollup的用法 当需要对数据库数据进行分类统计的时候,往往会用上groupby进行分组。 而在groupby后面还可以加入withcube和withrollup等关
  • mysql分组统计并求出百分比的方法

    mysql分组统计并求出百分比的方法
    mysql分组统计并求出百分比 1、mysql 分组统计并列出百分比 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 SELECT point_id, pname_cn, play_
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计