0

「mm_ads」と「mm_users」の2つのテーブルがあります。「mm_ads」はMyisamデータベースエンジンを使用し、「mm_users」はInnoDbを使用します。私が読んだところによると、後者のエンジンはトランザクションであり、最初のエンジンはトランザクションではないため、このような状況で外部キー参照を作成することは不可能です。しかし、私が実行すると:

ALTER TABLE mm_ads ADD CONSTRAINT FK_76EC3E1DF132696E3358 FOREIGN KEY (userid) REFERENCES mm_users (id)

エラーは表示されず、影響を受けた行の数だけが報告されます。私が見るより、fkはテーブルの列のインデックスだけで作成されているわけではありません。問題を調べてみると、テーブルのエンジンが異なることがわかったので、mm_adsのエンジンをInnodbに変更しました。しかし、コマンドを実行すると、このエラーが発生します。

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`admin_pw`.<result 2 when explaining filename '#sql-61b_3019e'>, CONSTRAINT `FK_76EC3E1DF132696E3358` FOREIGN KEY (`userid`) REFERENCES `mm_users` (`id`))

useridとidのタイプは同じで、テーブルに値があります。

4

1 に答える 1

2

私は次のことをします:

1.外部キーをドロップします

ALTER TABLE mm_ads DROP FOREIGN KEY `FK_76EC3E1DF132696E3358`;

2.子テーブルの孤立した行を識別します

SELECT * FROM mm_ads when userid not in (select id from mm_users);

3.子テーブルの孤立した行を処理する

mm_ads?から行を削除します mm_users行を?に挿入します ここであなた次第。いずれにせよ、 >関係にmm_ads基づいて孤立した行がなくなる必要があります。mm_ads.useridmm_users.id

4.エンジンを変更します

ALTER TABLE mm_ads ENGINE = InnoDB;

5.外部キーを復元する

ALTER TABLE mm_ads ADD CONSTRAINT FK_76EC3E1DF132696E3358 FOREIGN KEY (userid) REFERENCES mm_users (id);
于 2013-02-28T14:24:30.793 に答える