我正在使用 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
有谁知道问题是什么?