乐趣区

事务嵌套

mysql 事务如果出现嵌套会怎么样了?在 MVC 的开发模式下,大伙经常会在 model 层 封装事务,如果 model 层有互相调用的话,很容易出现事务嵌套,那么事务嵌套会出现什么问题呢?那么应该如何设计结构避免出现事务嵌套么?本次着重解决第一个问题。

时序 事务一 事务二
1 start transaction;
2 insert into test set id = 2;
3 select * from test;
4 start transaction;
5 select * from test;

命令行按照以上时序执行的时候会发现,时序 3 的 select 没有 id = 2 的数据;但是 时序 5 的时候出现了 id = 2 的数据;因此可以初步断定,事务嵌套的时候,start transaction 具有类似于 commit 的提交功能。实时确实如此,参照 MySQL 嵌套事务的讨论;不仅 start transaction 具有引起 commit 提交的功能,下列语句同样会引起 commit


ALTER FUNCTION  
ALTER PROCEDURE  
ALTER TABLE  
BEGIN  
CREATE DATABASE  
CREATE FUNCTION  
CREATE INDEX  
CREATE PROCEDURE  
CREATE TABLE  
DROP DATABASE  
DROP FUNCTION  
DROP INDEX  
DROP PROCEDURE  
DROP TABLE  
UNLOCK TABLES  
LOAD MASTER DATA  
LOCK TABLES  
RENAME TABLE  
TRUNCATE TABLE  
SET AUTOCOMMIT=1  
START TRANSACTION 

参考文献:

MySQL 嵌套事务的讨论

退出移动版