gpt4 book ai didi

mysql - 当其中一条语句在 MySQL 中失败时,事务不会回滚

转载 作者:行者123 更新时间:2023-12-05 02:52:26 26 4
gpt4 key购买 nike

我这里有简单的交易;

START TRANSACTION;
INSERT INTO user_photos(id, user_id, meta, upload_timestamp) VALUES (1211, 1, '{"a"}',
from_unixtime(unix_timestamp()));
UPDATE user_photos set user_id = '{"test"}' WHERE user_id = 1;
COMMIT;

INSERT 语句可以运行,但第二条语句 UPDATE 语句将失败,因为 user_id 列的类型为 INTEGER。

我想要一个事务,如果任何语句(内部事务)失败,该事务将回滚。此交易的行为并非如此。

我使用 INNODB 引擎。为什么这个交易不起作用?

最佳答案

MYSQL 在事务级别没有“自动回滚”功能。

如果某个语句失败,则回滚该语句但不回滚事务。如果运行 COMMIT,MySQL 将提交当前事务的所有非回滚语句:这就是发生的情况。如果您运行 ROLLBACK,所有语句都会回滚,无论它们是失败还是成功。

如果您想要不同的行为,您需要在您的应用程序代码中对其进行编码。这可以通过存储过程完成:参见 mysql transaction - roll back on any exception .

关于mysql - 当其中一条语句在 MySQL 中失败时,事务不会回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62611021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com