mysql 隱式提交的語句

因爲遇見過一個問題

session 1                                                      session 2

begin;                                                                             begin;

lock table t1 write;

update t1 set id=1 where id=2                                             update t1 set id=1 where id=2          

 

rollback                                                                          rollback

commit  發現事務沒有回滾                                             事務回滾

 

考慮一會 可能破壞了事務 ,查了一下 關於隱式提交的語句 總結在下面

 

下語句(以及同義詞)均隱含地結束一個事務,似乎是在執行本語句前,您已經進行了一個COMMIT。

·       1)  ALTER FUNCTION, ALTER PROCEDURE, ALTER TABLE, BEGIN, CREATE DATABASE, CREATE FUNCTION,               2)CREATE INDEX, CREATE PROCEDURE, CREATE TABLE, DROP DATABASE, DROP FUNCTION, DROP INDEX,              3)DROP PROCEDURE, DROP TABLE, LOAD MASTER DATA, LOCK TABLES, RENAME TABLE,SET                                       AUTOCOMMIT=1,            

      4)START TRANSACTION, TRUNCATE TABLE, UNLOCK TABLES.

·         噹噹前所有的表均被鎖定時,UNLOCK TABLES可以提交事務。

·         CREATE TABLE, CREATE DATABASE DROP DATABASE, TRUNCATE TABLE, ALTER FUNCTION, ALTER PROCEDURE, CREATE FUNCTION, CREATE PROCEDURE, DROP FUNCTION和DROP PROCEDURE等語句會導致一個隱含提交。

·         InnoDB中的CREATE TABLE語句被作爲一個單一事務進行處理。這意味着,來自用戶的ROLLBACK不會撤銷用戶在事務處理過程中創建的CREATE TABLE語句。

事務不能被嵌套。這是隱含COMMIT的結果。當您發佈一個START TRANSACTION語句或其同義詞時,該COMMIT被執行,用於任何當前事務。 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章