ホームページ >データベース >mysql チュートリアル >親レコードが削除されたときに、親を削除せずに MySQL で子レコードを削除するにはどうすればよいですか?

親レコードが削除されたときに、親を削除せずに MySQL で子レコードを削除するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-10 12:17:42465ブラウズ

How to Delete Child Records in MySQL When a Parent Record is Deleted (Without Deleting the Parent)

依存データの削除に MySQL の ON DELETE CASCADE を利用する

データの整合性を維持するには、多くの場合、親レコードの削除時に関連データを自動的に削除する必要があります。 MySQL の ON DELETE CASCADE 制約はこの機能を提供します。 よくある誤解は、この制約により、子レコードが削除されると親レコードも削除されるということです。これは間違っています。

目的の動作 (親 (タイプ) レコードが削除されたときに親に影響を与えることなく子 (コンポーネント) レコードを削除する) を実現するには、ON DELETE CASCADE を使用して子テーブルに外部キー関係を定義する必要があります。 以下は、components テーブルについてこれを示しています。

<code class="language-sql">CREATE TABLE `components` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `typeId` int(10) unsigned NOT NULL,
    `moreInfo` VARCHAR(32),
    -- etc
    PRIMARY KEY (`id`),
    KEY `type` (`typeId`),
    CONSTRAINT `myForeignKey` FOREIGN KEY (`typeId`)
      REFERENCES `types` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
);</code>

この構成により、types テーブルからレコードを削除すると、components テーブル内の対応するエントリがすべて自動的に削除され、types テーブルのレコードはそのまま残ります。

重要な考慮事項:

外部キー制約には InnoDB ストレージ エンジンの使用が必要であることに注意してください。 古い MySQL バージョンのデフォルト エンジンである MyISAM は、外部キーをサポートしていません。 したがって、この機能が正しく動作するには、テーブルが InnoDB を使用していることを確認してください。

以上が親レコードが削除されたときに、親を削除せずに MySQL で子レコードを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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