MySQL事务的SavePoint简介及操作浅谈

182 篇文章 0 订阅

SavePoint是数据库事务中的一个概念, 可以将整个事务切割为不同的小事务, 可以选择将状态回滚到某个小事务发生时的样子,本文给大家分享MySQL事务的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>

到此这篇关于MySQL事务的SavePoint简介及操作的文章就介绍到这了,更多

转载自:微点阅读   https://www.weidianyuedu.com

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值