ホームページ >データベース >mysql チュートリアル >MySQL の ON DELETE CASCADE は、タイプ レコードを保持したままコンポーネント レコードを自動的に削除できますか?

MySQL の ON DELETE CASCADE は、タイプ レコードを保持したままコンポーネント レコードを自動的に削除できますか?

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

Can MySQL's ON DELETE CASCADE Automatically Delete Component Records While Preserving the Type Record?

MySQL の ON DELETE CASCADE: 型レコードを保持しながらコンポーネントを削除する

MySQL の ON DELETE CASCADE は、関連レコードが削除されたときに依存レコードを自動的に削除します。 ただし、その適用にはテーブルの関係を慎重に考慮する必要があります。

それぞれが特定のタイプにリンクされているデータベース構造コンポーネントを考えてみましょう。目標は、型自体を削除せずに、型に関連付けられたすべてのコンポーネントを削除することです。 これは達成可能でしょうか?

アプローチ

これを達成するには、明確に定義されたテーブル構造内で ON DELETE CASCADE を戦略的に使用する必要があります。 解決策は次のとおりです:

<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>
  1. コンポーネント テーブルの作成: このテーブルには、コンポーネントの詳細とそれに対応する typeId が保持されます。

  2. 外部キーの実装: 外部キー制約 (myForeignKey) は、components テーブルの typeId 列を types テーブルの id 列に接続します。

  3. ON DELETE CASCADE 仕様: 重要な要素: ON DELETE CASCADEtypes テーブル内のレコードが削除されると (両方のテーブルが InnoDB ストレージ エンジンを使用していると仮定して)、components を共有する typeId テーブル内のすべての関連レコードが自動的に削除されます。

重要な考慮事項:

InnoDB は不可欠です。 MyISAM には外部キーのサポートがないため、このアプローチは無効になります。

以上がMySQL の ON DELETE CASCADE は、タイプ レコードを保持したままコンポーネント レコードを自動的に削除できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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