首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql查询删除具有单个查询时的多个表的外键关系

mysql查询删除具有单个查询时的多个表的外键关系
EN

Stack Overflow用户
提问于 2014-03-04 16:24:28
回答 2查看 1.3K关注 0票数 0

我已经创建了博客系统。在这个博客中,我创建了三个表。

表1:条款

代码语言:javascript
复制
+----------------+-----------+-------+-------------+
| article_id(PK) | name      | description         |
+----------------+-----------+-------+-------------+
| 1              | article-1 | lorem ipsum       |
| 2              | article-2 | lorem ipsum       |
+----------------+-----------+-------+-------------+

表2: article_hook

代码语言:javascript
复制
+---------------------------+---------+-----------+
| article_hook_id(PK, auto) | hook_id | hook_type |
+---------------------------+---------+-----------+
| 1                         | 1       | article   |
| 2                         | 1       | tag       |
+---------------------------+---------+-----------+

在这里,我创建了外键关系。我想要删除文章创建删除查询

代码语言:javascript
复制
DELETE FROM article WHERE article_id = 1 LIMIT 1

它成功地删除了记录。但是它删除了article_hook表中的所有记录,其中Hook_id=1,但是当我传递Hook_id=1和hook_type=‘article_hook’时,我只需要从article_hook表中删除一条记录。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-04 16:52:33

如果您不能像我在评论中提到的那样将表分开,您可以使用delete触发器来代替。

代码语言:javascript
复制
CREATE TRIGGER delete_hooks AFTER DELETE on article
DELETE from article_hook 
    WHERE article_hook.hook_id = old.id 
        AND hook_type = 'article'
票数 0
EN

Stack Overflow用户

发布于 2014-03-04 16:45:53

您可能已经指定了on delete cascade。所以这种行为。在提到的两个表之间确实有一个foreign key relationship

根据MySQL外键约束引用

级联:从父表中删除或更新行,并自动删除或更新子表中匹配的行。支持删除级联和更新级联。

根据这里的MySQL文档,http://dev.mysql.com/doc/refman/5.5/en/example-foreign-keys.html

对于InnoDB以外的存储引擎,在定义列时可以使用引用tbl_name(col_name)子句,该子句没有实际效果,只是作为备注或注释,说明您当前定义的列是要引用另一个表中的列。

因此,由于这两个表都具有FK关系;从父表中删除一行也将从子表/引用表中删除匹配行。

基于您的评论:

可以像下面这样创建复合外键,但是为了更好的性能,尝试分解表。

代码语言:javascript
复制
FOREIGN KEY (hook_id, hook_type) 
    REFERENCES article(article_id)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22177408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档