mysql 事務中如果有sql語句出錯,會導致自動回滾嗎?


事務,我們都知道具有原子性,操作要么全部成功,要么全部失敗。但是有可能會造成誤解。

我們先准備一張表,來進行測試

CREATE TABLE `name` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `name` varchar(32) DEFAULT '' COMMENT '名稱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

一、如果事務中,有某條sql語句執行時報錯了,我們沒有手動的commit,那整個事務會自動回滾嗎?

答案:會。

當我們直接把窗口關掉,新開窗口再去查詢表name時,表中沒有第一次插入的記錄,說明整個事務被回滾了。

 

二、如果事務中,有某條sql語句執行時報錯了,我們手動的commit,那整個事務還會回滾嗎?

答案:不會。

事務中如果有sql執行錯誤,但是我們commit了,mysql仍然會執行成功的語句,並不會把整個事務自動回滾。

 

三、如果事務中,有某條sql語句執行時報錯了,我們重新又開啟一個事務,那之前事務還會回滾嗎?

答案:不會。

我們在該會話中,重新用 begin; 開啟了一個新事務,新開的事務會將該會話中未提交的事務提交(相當於commit),所以上一個事務被提交了,導致語句一記錄寫入表中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM