利用 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 存储引擎。 MyISAM 是旧版 MySQL 中的默认引擎,不支持外键。 因此,请确保您的表使用 InnoDB 才能使此功能正常工作。
以上是MySQL删除父记录而不删除父记录时如何删除子记录?的详细内容。更多信息请关注PHP中文网其他相关文章!