gpt4 book ai didi

mysql - 圈外键引用插入MySQL和事务回滚

转载 作者:行者123 更新时间:2023-11-30 23:32:05 26 4
gpt4 key购买 nike

我正在使用 MySQL 和 InnoDB,但最近遇到了一些问题。

这是我要运行的声明(我删除了一些个人详细信息):

START TRANSACTION;

SET FOREIGN_KEY_CHECKS = 0;
INSERT INTO zdb_user (U_DateStart, U_Main_Adres_ID)
VALUES ('2012-04-08', 0);
SET FOREIGN_KEY_CHECKS = 1;

SET @newUID = LAST_INSERT_ID();

INSERT INTO zdb_adres (A_User_ID, A_Zipcode, A_Number)
VALUES (@newUID, '1234AB', 12);

UPDATE zdb_user SET U_Main_Adres_ID = LAST_INSERT_ID() WHERE User_ID = @newUID;

COMMIT;

问题是我使用的是“圆圈”外键引用。我现在通过禁用 key 检查来绕过它。

zdb_adres.A_User_ID 需要有效的 User_IDzdb_user.U_Main_Adres_ID 需要一个有效的 Adres_ID,但我两者都没有。现在,只要可以实际创建 zdb_user 中的记录,这一切都可以正常工作。但是有一些限制可能导致它无法创建。

我原以为交易会因错误而停止,但在运行一个简单的测试后我发现这根本不是真的。因此我去谷歌搜索并找到了几个解决方案,例如:

DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND BEGIN ROLLBACK; CALL ERROR_ROLLBACK_OCCURRED; END;

太糟糕了,它不起作用,当我在 START TRANSACTION; 之后添加它时收到语法错误:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND BEGIN ROLLBACK' at line 1

有人知道问题出在哪里吗?

最佳答案

摆脱禁用外键检查的唯一方法是使 U_Main_Adres 可以为空。

关于mysql - 圈外键引用插入MySQL和事务回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066486/

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