MySQL事務(wù)屬于數(shù)據(jù)庫(kù)管理系統(tǒng)的重要特性之一。一般而言,事務(wù)是指一組需要作為一個(gè)整體執(zhí)行的SQL操作。這些操作要么全部執(zhí)行成功,要么全部不執(zhí)行。如果其中的某個(gè)操作執(zhí)行失敗,就會(huì)回到最初狀態(tài)。因此,MySQL中的事務(wù)通常要滿足四個(gè)特性,分別是ACID,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)。
--設(shè)置autocommit為關(guān)閉 SET autocommit=0; --事務(wù)開始 START TRANSACTION; --一些SQL語(yǔ)句 INSERT INTO users (name, age) VALUES ('Alice', 22); UPDATE orders SET paid=1 WHERE order_id=1234; --檢查數(shù)據(jù)是否正確 SELECT * FROM users WHERE name='Alice'; SELECT * FROM orders WHERE order_id=1234; --如果數(shù)據(jù)正確,則提交事務(wù) COMMIT; --否則回滾事務(wù) ROLLBACK;
MySQL的事務(wù)模式有多種,比如讀未提交、讀已提交、可重復(fù)讀和串行化等。其中,讀未提交的模式下,一個(gè)事務(wù)即便沒有提交,其他事務(wù)仍然可以讀取它修改過的數(shù)據(jù)。在讀已提交的模式下,只有已經(jīng)提交的事務(wù)才可以讀取修改過的數(shù)據(jù)。可重復(fù)讀的模式則是保證在一個(gè)事務(wù)內(nèi),多次讀取同樣的數(shù)據(jù)時(shí),會(huì)得到同樣的結(jié)果。而串行化的模式則是保證在一個(gè)事務(wù)執(zhí)行時(shí),其它事務(wù)不能讀取或修改相同的數(shù)據(jù),以保證數(shù)據(jù)的一致性。