写在之前
里面有这么一句话。
Transactions cannot be nested. This is a consequence of the implicit commit performed for any current transaction when you issue a START TRANSACTION statement or one of its synonyms.
大体意思是db不支持事务嵌套,如果你嵌套执行START TRANSACTION时会隐式执行commit
我们做个测试:
mysql> BEGIN;
Query OK, 0 rows affected (0.16 sec)
mysql> INSERT INTO T2 VALUES(300);
Query OK, 1 row affected (0.29 sec)
mysql> BEGIN;
Query OK, 0 rows affected (0.04 sec)
mysql> rollback;
Query OK, 0 rows affected (0.04 sec)
mysql> SELECT * FROM T2;
+------+
| ID |
+------+
| 300 |
+------+
2 rows in set (0.04 sec)
果然,我们直接rollback上面的语句,但是还是执行了查询操作。
laravel之嵌套事务transactions实现
为啥官网不支持,但是 laravel 框架却优雅的实现了事务嵌套,我们来看看它的实现原理。