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_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

誰が問題が何であるか知っていますか?

4

1 に答える 1

0

外部キー チェックの無効化を取り除く唯一の方法は、U_Main_Adresnull 可能にすることです。

于 2012-04-11T13:41:34.573 に答える