MySQL事務的SavePoint簡介及操作

什麼是SavePoint

SavePoint是數據庫事務中的一個概念, 可以將整個事務切割為不同的小事務, 可以選擇將狀態回滾到某個小事務發生時的樣子,

語法

定義保存點的語法如下:

SAVEPOINT 保存點的名稱;

當我們想回滾到某個保存點時,可以使用下邊的語句。

ROLLBACK [WORK] TO 保存點的名稱

刪除保存點

RELEASE SAVEPOINT 保存點名稱;

重要操作

開啟事務: begin
....DML語句....
設置保存點: savepoint 保存點名字
....DML語句....
設置保存點: savepoint 保存點名字2
....DML語句....
回滾保存點: rollback to 保存點名字2 (此時保存點2後面操作的狀態都將回滾直保存點2時樣子)

註意,回滾點無法隨意跳轉,例如上面,如果跳轉到第一個保存點名字,就無法再到保存點名字2瞭,當事務整體提交、回滾時,保存點也隨之釋放。(一個事務中可以設置多少個保存點並無限制)

演示: 接下來用mysql演示一下,思路是向mysql insert三條數據, 每次insert設置一個保存點,在第三次insert後回滾到第一個保存點看下效果:

// 開始查詢空表
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簡介及操作的文章就介紹到這瞭,更多相關MySQL事務的SavePoint內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: