如何从不同的MySQL表中删除所有相关记录

时间:2011-12-28 17:59:30

标签: php mysql cascading-deletes

我的数据库中有两个表:'故事'和'投票'。
故事表包含有关文章的所有信息(例如标题,正文,作者姓名等)。 投票表包含所有文章的所有投票。 投票中有一个名为 item_name 的字段,其中包含投放投票的文章的 id

简单来说,投票中的 item_name 等于投票中的 id (具体取决于哪篇文章a用户投票)。

问题是:如果文章被删除,我该如何自动删除投票表中与该文章相关的所有记录?

可以在数据库中设置,所以不需要设置其他PHP查询吗?

这是我的数据库结构:

故事

enter image description here


enter image description here

2 个答案:

答案 0 :(得分:6)

MySQL有不同的存储引擎。在大多数MySQL管理IDE中,默认存储引擎为MyISAM。如果您对表使用此存储引擎,则无法在列之间创建任何关系,您必须自己删除相关列。

对于您想要的,innoDB是最佳解决方案。这种类型的存储引擎使情况在不同表的列之间创建关系。您需要在表格中使用主键和外键,并且在创建这些关系后,您必须为它们指定以下功能:

ON UPDATE CASCADEON DELETE CASCADE

因此,删除主记录后,您无需删除相关的列值。

看一下this link,在基准测试中对它们进行比较。

答案 1 :(得分:2)

在删除时级联设置相关字段的外键。

也许某人能够给你一个更详细的答案,但你必须使用支持外键的引擎(如InnoDB),如果你不知道怎么做,PHPMyAdmin应该帮助你完成其余的工作。用手。

简单地说,在字段上设置删除级联会告诉数据库删除具有该约束的每个记录,在您的情况下,文章(在另一个表上)将被删除。

有关详细信息,请参阅此处:

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

http://forums.digitalpoint.com/showthread.php?t=488163