一:默認狀況下,MySQL採用autocommit模式運行。這意味着,當您執行一個用於更新(修改)表的語句以後,MySQL馬上把更新存儲到磁盤中。默認級別爲不可重複讀。
二:會形成隱式提交的語句
如下語句(以及同義詞)均隱含地結束一個事務,彷佛是在執行本語句前,您已經進行了一個COMMIT。
(1)ALTER FUNCTION, ALTER PROCEDURE, ALTER TABLE, BEGIN, CREATEDATABASE, CREATE FUNCTION, CREATE INDEX, CREATE PROCEDURE, CREATETABLE, DROP DATABASE, DROP FUNCTION, DROP INDEX, DROP PROCEDURE, DROPTABLE, LOAD MASTER DATA, LOCK TABLES, RENAME TABLE, SET AUTOCOMMIT=1,START TRANSACTION, TRUNCATE TABLE, UNLOCK TABLES.
(2) 噹噹前全部的表均被鎖定時,UNLOCK TABLES能夠提交事務。
(3) CREATE TABLE, CREATE DATABASE DROP DATABASE, TRUNCATE TABLE,ALTER FUNCTION, ALTER PROCEDURE, CREATE FUNCTION, CREATE PROCEDURE,DROP FUNCTION和DROP PROCEDURE等語句會致使一個隱含提交。
(4) InnoDB中的CREATE TABLE語句被做爲一個單一事務進行處理。這意味着,來自用戶的ROLLBACK不會撤銷用戶在事務處理過程當中建立的CREATE TABLE語句。
事務不能被嵌套。這是隱含COMMIT的結果。當您發佈一個START TRANSACTION語句或其同義詞時,該COMMIT被執行,用於任何當前事務。
三:利用事務DML:
1.SET AUTOCOMMIT = {0 | 1}
2.使用START TRANSACTION,autocommit仍然被禁用,直到您使用COMMIT或ROLLBACK結束事務爲止。而後autocommit模式恢復到原來的狀態。
3.您也能夠按照以下方法開始一項事務:
START TRANSACTION WITH CONSISTENT SNAPSHOT;
WITH CONSISTENTSNAPSHOT子句用於啓動一個一致的讀取,用於具備此類功能的存儲引擎。目前,該子句只適用於InnoDB。該子句的效果與發佈一個STARTTRANSACTION,後面跟一個來自任何InnoDB表的SELECT的效果同樣。此稱爲「非一致的非鎖定讀取」post