次のような自己参照テーブルがあります。
「ClassGroup」のテーブル スキーマは次のとおりです。ID 文字
列、主キーの
名前文字列、
ParentClassGroup 文字列、外部キー (このテーブル自体の「id」を参照)
次のトランザクションは期待どおりに成功します。
オートコミットを設定=0;
トランザクションを開始します。
INSERT INTO CLASSGROUP(x_id, x_name, x_parentclassgroup_x_id) values("id1","cg1", null);
INSERT INTO CLASSGROUP(x_id, x_name, x_parentclassgroup_x_id) values("id2","cg2", "id1");
INSERT INTO CLASSGROUP(x_id, x_name, x_parentclassgroup_x_id) values("id3","cg3", null);
専念;
ただし、次のトランザクションは失敗します。
オートコミットを設定=0;
トランザクションを開始します。
INSERT INTO CLASSGROUP(x_id, x_name, x_parentclassgroup_x_id) values("id2","cg2", "id1");
INSERT INTO CLASSGROUP(x_id, x_name, x_parentclassgroup_x_id) values("id1","cg1", null);
INSERT INTO CLASSGROUP(x_id, x_name, x_parentclassgroup_x_id) values("id3","cg3", null);
専念;
エラーログ:
0 08:14:29 INSERT INTO CLASSGROUP(x_id, x_name, x_parentclassgroup_x_id,x_talend_timestamp) values("id2","cg2", "id1", 123) エラー コード: 1452。子行を追加または更新できません: 外部キー制約が失敗する (hier_master.classgroup、CONSTRAINT FKC0C64078BC2ACBF FOREIGN KEY (x_parentclassgroup_x_id) REFERENCES クラスグループ (x_id))
私の質問は次のとおりです。「id2」のレコードは「id1」のレコードを参照しているため、最初の挿入の前に2番目の挿入を行う必要があることをMySQLサーバーは十分に認識できませんか? 間違った挿入順序が原因で失敗が予想されますか? Oracle のような他のデータベースでのトランザクションはどうですか?
あなたの洞察と助けに感謝します!