MySQL 外部キー制約: 関連レコードを削除せずにタイプ レコードを削除
リレーショナル データベースでは、外部キー制約はデータの整合性を維持し、データの一貫性を確保するために重要です。 ON DELETE CASCADE
制約は、参照レコードが削除されたときに関連レコードを自動的に削除するためによく使用されます。ただし、場合によっては、関連レコード (そのタイプを持つコンポーネント) を保持したまま、参照レコード (タイプ) を削除する必要がある場合があります。
チャレンジ
指定されたシナリオは、各コンポーネントが外部キー関係を使用して特定のタイプに関連付けられているコンポーネントのデータベースを記述します。型を削除するときの目標は、型自体には影響を与えずに、その外部キーを持つすべてのコンポーネントを削除することです。ただし、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>
このクエリの重要な部分は、外部キー制約宣言の "ON DELETE CASCADE"
句です。この句は、削除された型を参照するすべてのコンポーネントを自動的に削除するようにデータベースに指示します。同時に、"ON UPDATE CASCADE"
句により、参照される型が更新されたときにコンポーネントの外部キーも更新されることが保証されます。
重要なヒント
この方法では InnoDB ストレージ エンジンを使用する必要があることに注意してください。デフォルトの MyISAM ストレージ エンジンは外部キーをサポートしません。したがって、MyISAM を使用している場合は、InnoDB に切り替えるか、外部キー関係を管理する別の方法を見つける必要があります。
以上がタイプの削除時に関連レコードを削除せずに MySQL で外部キーの関係を管理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。