没有任何 "start transaction" 调用 "rollback" 是不是很糟糕?
Is it bad to call "rollback" without any "start transaction"?
我正在使用 InnoDB 引擎与 PHP 和 MYSQL 一起开发 Web 项目。
我在事务中有一些重要的事情要做,如果其中任何事情失败,则必须回滚。我正在做的是为每一个出错的地方抛出异常,并在 catch 块中进行回滚。问题是 "start transaction" 之前可能存在异常,因此在这种情况下 "rollback" 将在没有任何事务的情况下执行。它没有什么可回滚的,我只是在问自己,白白做回滚是否有任何惩罚。 MYSQL 忽略它没有任何后果?
如果是,那很好,因为我可以避免做一些更复杂的逻辑,只有在事务开始时才发送回滚。
谢谢!
易于检查
# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 652
Server version: 5.7.29-0ubuntu0.18.04.1-log (Ubuntu)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql>
没有,没有惩罚。
我正在使用 InnoDB 引擎与 PHP 和 MYSQL 一起开发 Web 项目。
我在事务中有一些重要的事情要做,如果其中任何事情失败,则必须回滚。我正在做的是为每一个出错的地方抛出异常,并在 catch 块中进行回滚。问题是 "start transaction" 之前可能存在异常,因此在这种情况下 "rollback" 将在没有任何事务的情况下执行。它没有什么可回滚的,我只是在问自己,白白做回滚是否有任何惩罚。 MYSQL 忽略它没有任何后果?
如果是,那很好,因为我可以避免做一些更复杂的逻辑,只有在事务开始时才发送回滚。
谢谢!
易于检查
# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 652
Server version: 5.7.29-0ubuntu0.18.04.1-log (Ubuntu)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql>
没有,没有惩罚。