因爲遇見過一個問題
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被執行,用於任何當前事務。