MySQL 是一種關系型數據庫管理系統,一個事務是一組具有原子性的 SQL 語句,要么全部執行成功,要么全部執行失敗,這就是事務的原子性。
BEGIN TRANSACTION; INSERT INTO `table1` (`name`, `age`) VALUES ('Tom', 18); INSERT INTO `table2` (`name`, `gender`) VALUES ('Jerry', 'Male'); COMMIT;
在上述代碼中,BEGIN TRANSACTION 表示事務的開始,COMMIT 表示事務的提交,包含 INSERT 的兩個 SQL 語句是整個事務的一部分,保證它們的操作具有原子性,要么同時成功,要么同時失敗。
當執行 SQL 語句時,在 MySQL 中可以使用自動提交模式,也可以手動控制事務。如使用自動提交模式,每執行一條 SQL 語句就會自動提交,這種情況下,如果 SQL 語句執行失敗,可能會導致某些數據在數據庫中殘留,產生不可預期的錯誤。使用手動控制事務,可以保證一系列 SQL 語句在一個事務中,操作具有原子性。
START TRANSACTION; SELECT count(*) FROM `table1` WHERE `name`='Tom'; UPDATE `table1` SET `age`=`age`+1 WHERE `name`='Tom'; COMMIT;
在上述代碼中,START TRANSACTION 表示事務的開始,COMMIT 表示事務的提交,分別包含了 SELECT 和 UPDATE 的兩個 SQL 語句,前者是查詢,后者是更新。整個事務包含兩個步驟,查詢特定記錄的數量,更新這些記錄的年齡,操作結果具有原子性。
在 MySQL 中,事務具有四個基本屬性,分別是 ACID,原子性 (Atomicity) 是其中一種,其他屬性還包括一致性 (Consistency),隔離性 (Isolation) 和持久性 (Durability),了解這些屬性可以完善對事務的理解。