Mysql 关于删除级联替换
我正在尝试为孩子和家长创建一个数据库。桌子看起来像 子表:子id(pk)|父id(fk)|名称 父表:父id(主键)|名称 外键ParentTable(父id)在删除级联时引用子表(父id) 问题:父表可以有多个子表,并且父表依赖于子表。如果一个父项有两个子项,并且我们从ChildTable中删除一个子项记录,那么它也会删除父项,而另一个记录仍在数据库中的子项必须存在父项记录 是否有其他MySQL方法/约束可以满足上述要求 提前谢谢 更新:我想详细解释我的问题 我想对数据库应用以下规则:Mysql 关于删除级联替换,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我正在尝试为孩子和家长创建一个数据库。桌子看起来像 子表:子id(pk)|父id(fk)|名称 父表:父id(主键)|名称 外键ParentTable(父id)在删除级联时引用子表(父id) 问题:父表可以有多个子表,并且父表依赖于子表。如果一个父项有两个子项,并且我们从ChildTable中删除一个子项记录,那么它也会删除父项,而另一个记录仍在数据库中的子项必须存在父项记录 是否有其他MySQL方法/约束可以满足上述要求 提前谢谢 更新:我想详细解释我的问题 我想对数据库应用以下规则: 父表
- 父表中的记录必须始终依赖于子表中的任何一个或两个记录。(为相同的目的添加了FK。)
- 有可能两个孩子可以指向同一个parentID
- 如果我们删除了一个具有parentID的子项(比如“abc”),那么如果存在另一个具有相同parentID的子项,则不能删除父项id
- 删除第二个具有相同parentID('abc')的子项时,现在必须将其删除,因为没有具有parentID('abc')的子项
FOREIGN KEY parent-id REFERENCES ParentTable(parent-id) ON DELETE CASCADE
您希望子表引用父表中的主键。但要注意级联删除:删除父行时,会自动删除其所有子行
删除一个子行时,父行不会发生任何变化
更新:您想要的东西只能通过使用触发器来完成。您需要在
ChildTable
上创建一个AFTER DELETE
触发器,检查是否可以删除ParentTable
中的一行。我尝试了您的解决方案,但phpMyAdmin给出了错误。。另外,我希望父表在子表上是可靠的,如果我们反转外键,它将改变依赖关系,而我只想在没有子表时删除父记录。我更新了我的问题,没有更多细节。希望这能解释我的问题。我也搜索了MYSQL手册,但没有找到任何类似的内容。