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!
推薦閱讀:
- MySQL truncate table語句的使用
- MySQL update set 和 and的區別
- MySQL SQL預處理(Prepared)的語法實例與註意事項
- postgresql兼容MySQL on update current_timestamp問題
- mysql中insert ignore、insert和replace的區別及說明