日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL 基础 ———— SAVEPOINT 的应用

發布時間:2025/3/12 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL 基础 ———— SAVEPOINT 的应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

savepoint 關鍵字用于在數據庫事務中設置一個存儲點,在一個較長的事務中暫存數據,如果在事務末尾執行回滾,可選擇性的回滾到 savepoint 設置的暫存點。

本文承接上一篇博客《MySQL 基礎 ————事務與隔離級別總結》,進一步探討事務在實際生產中的重要場景——回滾。

一、SAVEPOINT 語法

SAVEPOINT identifier ROLLBACK [WORK] TO [SAVEPOINT] identifier RELEASE SAVEPOINT identifier

數據庫的 InnoDB 存儲引擎(一般情況下都是指此引擎,該引擎是MySQL默認存儲引擎,因為另一個比較常見的存儲引擎MyISAM不支持事務)支持的 SAVEPOINT 語句,包括上述三種。

SAVEPOINT 通過自定義的名稱設置一個存儲點,如果當前事務已經有了一個同名的 SAVEPOINT ,那么舊的將會被替代。

ROLLBACK TO SAVEPOINT 子句可以將當前事務回退到自定義的存儲點位置,而不會結束事務,InnoDB 不會釋放內存中的行鎖(對于新插入的行,鎖信息是由存儲在行中的事務ID攜帶,而不會單獨存儲在內存中,那么對于這類鎖,是會被釋放的),存儲點之后語句都會撤銷執行,包括新設置的存儲點,也同樣會被刪除。

RELEASE SAVEPOINT 子句,會從當前的事務 SAVEPOINT 集合中,移除指定名稱的 SAVEPOINT 。

另外,執行 COMMIT 或 ROLLBACK (未指定 SAVEPOINT)都會清空當前事務的所有 SAVEPOINT。

二、演示

員工表:

操作過程是,開啟事務,然后執行兩條更新語句,第一條更新 6 號員工的工資,然后設置一個 SAVEPOINT ,第二條更新 9 號員工的工資,執行完成后,回滾到 SAVEPOINT ,然后 COMMIT ,查看6 號 和 9 號員工的工資各有什么變化。

1、開啟事務:

SET autocommit = 0;

2、執行更新 6 號員工工資的語句:?

UPDATE emp SET salary = 4000 WHERE emp_id = 6;

?

3、執行 SAVEPOINT:

SAVEPOINT id_6_updated;

4、再執行第二條語句,更新 9 號員工的工資:

UPDATE emp SET salary = 6000 WHERE emp_id = 9;

5、然后,回滾到 SAVEPOINT id_6_updated:

ROLLBACK TO SAVEPOINT id_6_updated;

6、提交更新:

COMMIT;

7、查看最后的更新結果:

可以看到, 6 號員工的工資成功被修改,而 9 號員工的工資雖然執行了更新,但是因為回滾到了執行語句之前的 SAVEPOINT 而沒有被更新。

?

總結

以上是生活随笔為你收集整理的MySQL 基础 ———— SAVEPOINT 的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。