ホームページ >データベース >mysql チュートリアル >親レコードが削除されたときに、親を削除せずに MySQL で子レコードを削除するにはどうすればよいですか?
依存データの削除に 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 サイトの他の関連記事を参照してください。