ホームページ >データベース >mysql チュートリアル >親行を削除または更新できません: 外部キー制約が失敗します - MySQL エラーを解決する方法: 親行には外部キー制約があります
MySQL エラーを解決する方法: 親行には外部キー制約があり、特定のコード例が必要です
MySQL データベースを開発に使用する場合、よくエラーが発生します。メッセージ : "親行を削除または更新できません: 外部キー制約が失敗します" (親行を削除または更新できません: 外部キー制約が失敗します)。
このエラー メッセージは通常、他のテーブルのレコードによって参照されている行を削除または更新しようとしたときに発生します。この場合、MySQL は外部キー制約に基づいて親行の削除または更新操作を禁止します。この問題を解決するには、外部キー制約を適切に処理する必要があります。
以下では、この問題を解決するためのいくつかの方法を、具体的なコード例とともに説明します。
たとえば、orders
と order_items
という 2 つのテーブルがあるとします。 order_items
テーブルの order_id
フィールドは、orders
テーブル内の注文への外部キー参照です。 orders
テーブル内の注文を削除する場合は、まず order_items
テーブル内の注文に関連する下位行データを削除する必要があります。
具体的なコード例は次のとおりです。
CREATE TABLE orders( id INT PRIMARY KEY, order_name VARCHAR(50) ); CREATE TABLE order_items( id INT PRIMARY KEY, order_id INT, item_name VARCHAR(50), FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE );
上記のコードでは、order_items## を作成するときに、
order_id フィールドを ## のペアに設定します。 # table #orders
テーブルの外部キー制約で、ON DELETE CASCADEが指定されています。このようにして、orders
テーブル内の注文を削除すると、その注文に関連する order_items
テーブル内のレコードも自動的に削除されます。
ALTER TABLE order_items DROP FOREIGN KEY fk_order_items_order_id;
上記のコードでは、
ALTER TABLE ステートメントを使用して order_items
を削除します。テーブル ##orders のペア テーブルの外部キー制約。
次に、次のように削除操作を実行できます:
DELETE FROM orders WHERE id = 1;上記の削除ステートメントを実行すると、MySQL は削除された行に関連する外部キー制約を検証しなくなるため、親は正常に削除されました。行。
親行の値を更新する
場合によっては、親行を削除するのではなく、親行の値のみを更新したい場合があります。この場合、親行の値を更新する前に、その親行に関連するすべての子行の外部キー参照を更新する必要があります。UPDATE order_items SET order_id = 2 WHERE order_id = 1; UPDATE orders SET id = 2 WHERE id = 1;
order_items
テーブル内の外部キー参照を以前に参照したものに更新します。親行 ID 1 であるレコードのorder_id フィールド値が 2 に更新されます。次に、
orders テーブル内の ID 1 のレコードの値を 2 に更新します。
このようにして、親行の値を正常に更新しました。
以上が親行を削除または更新できません: 外部キー制約が失敗します - MySQL エラーを解決する方法: 親行には外部キー制約がありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。