1. 程式人生 > >MYSQL中預設隱式事務及利用事務DML

MYSQL中預設隱式事務及利用事務DML

一:預設情況下,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的效果一樣。此稱為“非一致的非鎖定讀取”

一:預設情況下,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的效果一樣。此稱為“非一致的非鎖定讀取”