MySQL到底支不支援交易嵌套?

藏色散人
發布: 2019-05-14 15:15:28
轉載
2678 人瀏覽過

最近開發中遇到了使用MySQL,多次開啟事務,出現了資料錯亂問題,偽代碼如下:

begin;
# 操作1
begin;
# 操作2
rollback;
登入後複製

執行完後出現了操作1的資料真正寫入,只有操作2的資料回滾了。當第一個交易沒有提交或回滾時,再開啟第二個交易時,會自動提交第一個交易。

這明顯不符合心理預期,也無法回滾一部分操作。那麼問題來了,MySQL 位元不支援事務嵌套呢

這個問題很難準確回答支持還是不支持!

首先,呼叫多次begin的寫法,在MySQL裡肯定是無法先事務嵌套的。經過群內一位朋友的提醒,了解到MySQL中有一個叫savepoint和rollback to的語句。

範例程式碼:

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
 
begin;
 
insert into `test`(`name`) values('111');
 
SAVEPOINT p1;
 
insert into `test`(`name`) values('222');
 
ROLLBACK TO p1;
 
commit;
登入後複製

最終執行結果,test表中只有111這個數據,實現了部分操作的回溯操作。同理也避免了多次開啟事務,導致前一個事務被提交的問題。

可能savepoint和rollback to語句並不能稱為交易嵌套,也不能說MySQL是支援還是不支援事務嵌套。總之透過savepoint和rollback to,是可以用來達到一些事務嵌套特性的。

以上是MySQL到底支不支援交易嵌套?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yurunsoft.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板