事务不能嵌套,这是由于START TRANCACTION语句会隐式地执行commit。(MySQL官方文档13.3.3 Statements That Cause an Implicit Commit)
比如:
但对于innoDB来说,可以利用Savepoint功能模拟事务嵌套,也就是在一个事务中,在想开子事务的地方定义一个保存点,想要回滚的时候回滚到这个保存点,这样在保存点和回滚操作中间就模拟出了一个原子性的事务。