mysql如何使用事务执行多条SQL

坦白讲,在MySQL中使用事务执行多条SQL语句其实是相当容易的。
这包括通过几个重要步骤确保数据一致性。
我们先来说说最重要的事情。
您必须确保您的存储引擎支持事务。
例如,InnoDB支持事务,但MyISAM不支持。
我们去年跑的一个项目大约有3 000级数据,并且使用了InnoDB引擎。

还有一点是你需要启动一个事务。
这可以使用 BEGIN 或 START TRANSACTION 来完成,因此后续 SQL 语句不会立即生效。
例如,您可以写: 或开始一个事务。

另一个非常重要的细节是事务中需要原子操作的 SQL 语句的执行,例如插入和更新。
一开始我以为只要写一条SQL语句就可以执行,但后来发现我错了。
您需要检查所有这些操作是否成功或失败。

接下来,如果所有SQL执行成功,则使用COMMIT提交事务,以便永久保存数据。
如果您发现问题,例如余额不足,您应该使用 ROLLBACK 来撤消任何未提交的更改。

等等,还有另一种自动提交模式。
MySQL默认打开自动提交,但是使用BEGIN打开事务会自动关闭自动提交。
如果需要手动控制,可以使用SET autocommit=0。
将其关闭,然后使用 SET autocommit=1 来恢复它。

最后一个陷阱是事务的本质和 ACID 原则。
为了保证数据操作的安全,必须保证事务的原子性、一致性、隔离性和持久性。
很多人没有注意到这一点,但我认为值得一试,因为它避免了许多潜在的数据问题。

换句话来说,在MySQL中执行多个SQL语句时,正确使用事务可以保证数据的完整性和一致性。

在一个页面同时执行多条sql语句

等等,我昨天在调试那个旧系统时遇到了一些奇怪的事情。
界面是后台用Java写的,客户端发送三个更新语句,数据库立刻就卡住了。
经过一番搜索,我发现MySQL默认不允许执行多条语句,所以我不得不手动更改JDBC连接参数。
那时,我通过滑动添加了allowMultiQueries=true,但突然我注意到 SQL 注入的风险显着增加。
我很快转而使用预编译语句,并且需要三个请求才能完成。
但在性能测试中,批量插入实际上快了3 0%,5 00条数据的INSERT从8 秒缩短到2 .7 秒。
这让我想起了我用Navicat处理临时表的时候。
我总是在下午2 点偷偷进行几十次批量操作。
结果第二天运维就叫我出去喝茶了……