最新消息:

Mysql事务嵌套测试

Mysql 718浏览 0评论

先看测试截图:

image.png

测试代码:

mysql> use test_trans;
Database changed
mysql> show tables;
+----------------------+
| Tables_in_test_trans |
+----------------------+
| t_trans              |
+----------------------+
1 row in set (0.00 sec)

mysql> select  * from t_trans;
Empty set (0.00 sec)

mysql>
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_trans values(1, 'first');
Query OK, 1 row affected (0.00 sec)

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_trans values(2, 'second')
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t_trans values(3, 'third');
Query OK, 1 row affected (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t_trans;
+------+--------+
| id   | val    |
+------+--------+
|    1 | first  |
|    2 | second |
|    3 | third  |
+------+--------+
3 rows in set (0.00 sec)

mysql>

上图看出最外层的嵌套事务rollback失效,也就是每次 start transaction 都会先提交前面未提交的 transaction,然后再开启新的 transaction。换句话说就是嵌套事务的运行方式其实是不能保证数据准确性的,应该尽可能优化代码实现方式,尽量避免嵌套事务的写法。

转载请注明:微刻 blog.wecot.cn » Mysql事务嵌套测试

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址