mysql エラー 1022 は、重複した外部キー名が原因で発生します。解決策は次のとおりです: 1. 「select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where CONSTRAINT_NAME='...'」コマンドを使用して、重複した外部キー名を検索します。外部キーの名前を変更するだけです。
このチュートリアルの動作環境: Windows 10 システム、MySQL バージョン 5.7、Dell G3 コンピューター。
mysql エラー 1022 はどうすればよいですか?
mysql エラー エラー コード: 1022。書き込めません。テーブル `xxx` のキーが重複しています。
説明: このエラーは外部キー名が重複しています。
重複した外部キー名を検索し、それらが使用されている場所を調べます。SQL は次のとおりです:
select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where CONSTRAINT_NAME='重复的外键名称'
問題がなければ、名前を変更するだけです。
関連拡張:
1 外部キーの定義
外部キーは、別のテーブルの主キーに含まれるテーブル内の列です。
外部キーもインデックスの一種で、一方のテーブルの列を別のテーブルの主キーにポイントすることで 2 つのテーブルを関連付けます。
テーブルには 1 つの外部キーを持つことも、複数のテーブルに関連付けられた複数の外部キーを持つこともできます。
2 外部キーの役割
外部キーの主な役割は、データの一貫性と整合性を確保し、データの冗長性を軽減することです。
主に次の 2 つの側面に反映されます:
実行の防止
テーブルから新しい行を挿入します。キー値 主キー値がメインテーブルでない場合、挿入はブロックされます。
テーブルの外部キー値を変更します。新しい値がメイン テーブルの主キー値ではない場合、変更はブロックされます。
マスター テーブルから行を削除します。その主キーの値がスレーブ テーブルに存在する場合、削除は阻止されます (削除したい場合は、まずスレーブ テーブルから関連する行を削除する必要があります)。
プライマリ テーブルはプライマリ キーの値を変更します。古い値がセカンダリ テーブルに存在する場合、変更は阻止されます (変更する場合は、まずセカンダリ テーブルから関連する行を削除する必要があります)。
カスケード実行
メイン テーブルから行を削除し、テーブルから関連する行をまとめて削除します。
メインテーブルの主キー値を変更し、スレーブテーブルの関連行の外部キー値をまとめて変更します。
3 外部キー作成の制限
親テーブルはデータベースにすでに存在しているか、現在作成中のテーブルである必要があります。
後者の場合、親テーブルと子テーブルは同一のテーブルとなり、このようなテーブルを自己参照テーブルと呼び、この構造を自己参照整合性と呼びます。
主キーは親テーブルに定義する必要があります。
外部キーの列数は、親テーブルの主キーの列数と同じである必要があります。
2 つのテーブルは InnoDB テーブルである必要があります。MyISAM テーブルは現在外部キーをサポートしていません。
外部キー列にはインデックスを作成する必要があります。MySQL 4.1.2 以降のバージョンでは、外部キーを確立するときにインデックスが自動的に作成されますが、それ以前のバージョンでは、インデックスを明示的に作成する必要があります。
外部キー関係の 2 つのテーブルの列は、類似したデータ型、つまり相互に変換できる列である必要があります。たとえば、int と tinyint は使用できますが、int と char は使用できません。 。
推奨学習: 「MySQL ビデオ チュートリアル 」
以上がmysqlエラー1022の対処法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。