您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關MySQL中怎么實現事物回滾,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
事物的概念:
事物由一個單獨單元的一個或多個sql語句組成,如果其中一個語句不能完成,整個單元就會回滾,所有影響到的數據將返回到事物開始以前的狀態。因而,只有事物中的所有語句都成功執行才能說明這個事物被成功的執行。
這句話的本身沒有什么問題,但是請看下面的案例
mysql事務中有兩條insert語句,其中第二條語句是錯誤的,在運行完事務后,第一條仍然插進去了,代碼如下。
//創建表:
CREATE TABLE `test_tab` (
`f1` int(11) NOT NULL ,
`f2` varchar(11) DEFAULT NULL ,
PRIMARY KEY (`f1`)
)
ENGINE=InnoDB
//執行事務:
START TRANSACTION;
INSERT INTO test_tab VALUES (1, '2');
INSERT INTO test_tab VALUES (1, '3');
COMMIT;
一開始認為只要把事務寫出來,最后用commit提交一下,數據庫會自動判斷這些語句是否全執行成功,如果成功則把所有的數據插入到數據庫,如果有一條失敗就自動回滾至原始狀態!顯然我認為錯了。
[SQL]START TRANSACTION;
受影響的行: 0
時間: 0.000s
[SQL]
INSERT INTO test_tab VALUES (1, '2');
受影響的行: 1
時間: 0.001s
[SQL]
INSERT INTO test_tab VALUES (1, '3');
[Err] 1062 - Duplicate entry '1' for key 'PRIMARY'
我們看結果可以知道INSERT INTO test_tab VALUES (1, '3');這一句因為主鍵沖突運行失敗,從而這一條下面的commit也沒有執行。
需要注意的是:這時已經開啟了一個事務,并且已經執行了一條正確的插入語句,雖然沒有體現在數據庫中,但如果以后在該連接中又執行了一條commit 或begin或start transaction(新開一個事務會將該鏈接中的其他未提交的事務提交,相當于commit!)你會發現已經將剛才的INSERT INTO test_tab VALUES (1, '2');寫進了數據庫。
上述就是小編為大家分享的MySQL中怎么實現事物回滾了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。