我正在使用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;
问题是我正在使用'circle'外键引用。我现在通过禁用密钥检查来绕过它。
zdb_adres.A_User_ID
需要有效的User_ID
。 zdb_user.U_Main_Adres_ID
需要有效的Adres_ID
,但我没有。DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND BEGIN ROLLBACK; CALL ERROR_ROLLBACK_OCCURRED; END;
。现在只要可以实际创建zdb_user中的记录,这一切都可以正常工作。但是它有一些限制因素可能会导致它无法创建。
我认为在一个错误上事务会停止,但在运行一个简单的测试后我发现这根本不是真的。因此我去google搜索,我找到了几个解决方案,如:
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
之后添加它时收到语法错误:
{{1}}
有人知道问题是什么吗?
答案 0 :(得分:0)
摆脱禁用外键检查的唯一方法是使U_Main_Adres
可以为空。