mysql事務,START TRANSACTION, COMMIT和ROLLBACK,SET AUTOCOMMIT文法
http://yulei568.blog.163.com/blog/static/135886720071012444422/
MyISAM不支援
START TRANSACTION | BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET AUTOCOMMIT = {0 | 1}
START TRANSACTION或BEGIN語句可以開始一項新的事務。COMMIT可以送出目前事務,是變更成為永久變更。ROLLBACK可以 復原目前事務,取消其變更。SET AUTOCOMMIT語句可以禁用或啟用預設的autocommit模式,用于目前連接配接。
自選的WORK關鍵詞被支援,用于COMMIT和RELEASE,與CHAIN和RELEASE子句。CHAIN和RELEASE可以被用于對事務完成進行附加控制。Completion_type系統變量的值決定了預設完成的性質。請參見5.3.3節,“伺服器系統變量”。
AND CHAIN子句會在目前事務結束時,立刻啟動一個新事務,并且新事務與剛結束的事務有相同的隔離等級。RELEASE子句在終止了目前事務後,會讓伺服器斷開與目前用戶端的連接配接。包含NO關鍵詞可以抑制CHAIN或RELEASE完成。如果completion_type系統變量被設定為一定的值,使連鎖或釋放完成可以預設進行,此時NO關鍵詞有用。
預設情況下,MySQL采用autocommit模式運作。這意味着,當您執行一個用于更新(修改)表的語句之後,MySQL立刻把更新存儲到磁盤中。
如果您正在使用一個事務安全型的存儲引擎(如InnoDB, BDB或NDB簇),則您可以使用以下語句禁用autocommit模式:
SET AUTOCOMMIT=0;
通過把AUTOCOMMIT變量設定為零,禁用autocommit模式之後,您必須使用COMMIT把變更存儲到磁盤中,或着如果您想要忽略從事務開始進行以來做出的變更,使用ROLLBACK。
如果您想要對于一個單一系列的語句禁用autocommit模式,則您可以使用START TRANSACTION語句:
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
使用START TRANSACTION,autocommit仍然被禁用,直到您使用COMMIT或ROLLBACK結束事務為止。然後autocommit模式恢複到原來的狀态。
BEGIN和BEGIN WORK被作為START TRANSACTION的别名受到支援,用于對事務進行初始化。