1

我正在使用 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;

问题是我使用的是“圆形”外键引用。我现在通过禁用密钥检查绕过了它。

zdb_adres.A_User_ID需要有效的User_ID. 并且zdb_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

有谁知道问题是什么?

4

1 回答 1

0

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

于 2012-04-11T13:41:34.573 回答