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);
Referencing column 'def_id' and referenced column 'id' in foreign key constraint 'id_id' are incompatible.
仔细看会发现这个报错和一开始导入数据时候的报错差不多
4. エラーレポートを解決する
エラーレポートによると、エラーの原因は親テーブルの主キー列のデータ型と子テーブルのデータ型の不一致であることが分かります。データ型が一致している場合にのみ、外部キー制約を適用できます。作成されます。
そのときは、最後のテーブルレベルの文字セットの種類と並べ替えだけを見ていて、2 つの列の具体的な違いについては見ていなかったため、理由を見つけることができませんでした。
- 親テーブル
- 子表
将子表的字符集类型修改和父表一致
alter table t5 modify column def_id varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
创建外键约束
alter table t5 add constraint id_id foreign key (def_id) references t4 (id);