共计 669 个字符,预计需要花费 2 分钟才能阅读完成。
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 嵌套事务的讨论
正文完