外部キー制約 'id_id' 内の参照列 'def_' と参照される列 'id' は互換性がありません

Mysql5.7->8.0 のデータ エラー報告 外部キー制約 'id_id' の参照列 'def_id' と参照される列 'id' に互換性がありません

データのインポート時にエラーが報告され、2 つのテーブルのインポートに失敗しました。

** (myloader: 121427): CRITICAL **: 16:54:10.845: Error restoring workflow.act_ru_task from file workflow.act_ru_task-schema.sql: Referencing column TASK ID • and referenced column ID • in foreign key constraint
*ACT FK TSKASS TASK are incompatible.

** (myloader: 121427): CRITICAL **: 16:54:11.193: Error restoring workflow.act_re_procdef from file workflow.act_re_procdef.00000.sql: Table workflow.act_re_procdef doesn't exist

実は上記のエラーレポートにヒントがあったのですが、当時は理解できませんでした。

1. 最初のアイデア

set forigen_key_checks=0;

show variables like 'foreign_key_checks';

最初に思い浮かぶのは外部キー チェックによるエラーであり、ターゲット ライブラリで外部キー チェックを無効にしますが、この時点でこのパラメータはターゲット ライブラリですでに無効になっています。

2. 治療方法

以下は私が検討した処理のアイデアですが、実際にはそれほど複雑である必要はありません。

1. 2 つの外部キー制約によって引き起こされるエラーが見つかりました

select * from information_schema.table_constraints where constraint_name in ('id_id');

このビューはすべての制約情報を記録します

2. 外部キーを手動で削除し、エラーを報告したテーブルをインポートします。

alter table t5 drop foreign key t1_t1;


source /tmp/t5.sql

3. 外部キーの復元 (エラー報告)

1.查看创建表的sql
show create table t5

2.添加外键
alter table t5 add constraint id_id foreign key (def_id) references t4 (id);

画像-20230809174121735

Referencing column 'def_id' and referenced column 'id' in foreign key constraint 'id_id' are incompatible.

仔细看会发现这个报错和一开始导入数据时候的报错差不多

4. エラーレポートを解決する

エラーレポートによると、エラーの原因は親テーブルの主キー列のデータ型と子テーブルのデータ型の不一致であることが分かります。データ型が一致している場合にのみ、外部キー制約を適用できます。作成されます。

そのときは、最後のテーブルレベルの文字セットの種類と並べ替えだけを見ていて、2 つの列の具体的な違いについては見ていなかったため、理由を見つけることができませんでした。

  • 親テーブル

画像-20230809174442083

  • 子表

画像-20230809174512353

将子表的字符集类型修改和父表一致

alter table t5 modify column def_id varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

画像-20230809174813323

创建外键约束

alter table t5 add constraint id_id foreign key (def_id) references t4 (id);

画像-20230809174939515

おすすめ

転載: blog.csdn.net/m0_49562857/article/details/132199485