ホームページ >データベース >mysql チュートリアル >親行を削除または更新できません: 外部キー制約が失敗します - MySQL エラーを解決する方法: 親行には外部キー制約があります

親行を削除または更新できません: 外部キー制約が失敗します - MySQL エラーを解決する方法: 親行には外部キー制約があります

WBOY
WBOYオリジナル
2023-10-05 08:49:141941ブラウズ

Cannot delete or update a parent row: a foreign key constraint fails - 如何解决MySQL报错:父行有外键约束

MySQL エラーを解決する方法: 親行には外部キー制約があり、特定のコード例が必要です

MySQL データベースを開発に使用する場合、よくエラーが発生します。メッセージ : "親行を削除または更新できません: 外部キー制約が失敗します" (親行を削除または更新できません: 外部キー制約が失敗します)。

このエラー メッセージは通常、他のテーブルのレコードによって参照されている行を削除または更新しようとしたときに発生します。この場合、MySQL は外部キー制約に基づいて親行の削除または更新操作を禁止します。この問題を解決するには、外部キー制約を適切に処理する必要があります。

以下では、この問題を解決するためのいくつかの方法を、具体的なコード例とともに説明します。

  1. 関連する子行データの削除
    削除または更新操作を実行する前に、親行に関連する子行データを削除する必要があります。これは、外部キーの ON DELETE CASCADE 属性を設定することで実現できます。親行が削除されると、その親行を参照するすべての子行も自動的に削除されます。

たとえば、ordersorder_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 テーブル内のレコードも自動的に削除されます。

外部キー制約を解放した後に削除する
    ON DELETE CASCADE を設定したくない場合、または親行に関連する子行データを削除できない場合は、まず外部キーを解放します。制約を設定してから、削除操作を続行します。

  1. 具体的なコード例は次のとおりです。
ALTER TABLE order_items DROP FOREIGN KEY fk_order_items_order_id;

上記のコードでは、

ALTER TABLE

ステートメントを使用して order_items を削除します。テーブル ##orders のペア テーブルの外部キー制約。 次に、次のように削除操作を実行できます:

DELETE FROM orders WHERE id = 1;

上記の削除ステートメントを実行すると、MySQL は削除された行に関連する外部キー制約を検証しなくなるため、親は正常に削除されました。行。

親行の値を更新する

場合によっては、親行を削除するのではなく、親行の値のみを更新したい場合があります。この場合、親行の値を更新する前に、その親行に関連するすべての子行の外部キー参照を更新する必要があります。

  1. 具体的なコード例は次のとおりです:
  2. 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 エラー:「親行を削除または更新できません: 外部キー制約が失敗しました」が発生した場合、親行に関連する子行データを削除できます。これを解決します。外部キー制約を解放した後、親行の値を削除または更新することで問題を解決します。特定のビジネス ニーズやデータ操作条件に応じて、対応する処理方法を選択し、外部キー制約の問題に対処するための合理的なコードを記述します。

以上が親行を削除または更新できません: 外部キー制約が失敗します - MySQL エラーを解決する方法: 親行には外部キー制約がありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。