MySQL删除表问题

时间:2011-01-05 12:05:44

标签: php mysql

因为我有这么多类别,所以我创建了一个“类别”数据库表:

"id_category , parent_id , category_name , category_tag"

示例:

  ----------------------------------------------------------
  | id_category | parent_id | category_name | category_tag |
  ----------------------------------------------------------
  | 1           | 0         | Cars          | cars         |
  | 2           | 1         | Parts         | parts        |
  | 3           | 2         | Accesories    | accesories   |
  ----------------------------------------------------------

树:

  Cars
     |_Parts
           |_Accesories

当我想要删除树中的所有记录时,会出现问题。 如何从上面的示例中删除树分支中的所有记录。

在mySQL中用PHP可以吗?

4 个答案:

答案 0 :(得分:2)

查找InnodB,这是您的网站目前可能使用的MyISAM类型的数据库引擎,同时查找Cascade Deletes

InnobDb允许您在表格中的指标之间分配关系,然后您可以指定删除或更新行时发生的操作。

您希望将ON DELETE操作设置为CASCADE,这会将删除操作级联到子行及其子行。因此,删除父母将自动删除所有孩子,大孩子等。

答案 1 :(得分:1)

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

您正在寻找的是parent_id上的外键,该外键引用id_category,其约束为ON DELETE CASCADE。然后你可以删除根元素(category_id 0),最后你应该得到一个空表。

答案 2 :(得分:0)

数据库表本质上不是一棵树,你通常会做什么

DELETE FROM categories WHERE id_category=3

DELETE FROM categories WHERE id_category=3 AND parent_id=2

答案 3 :(得分:0)

如果您没有带约束的键,则只能通过表上的TRUNCATE命令删除所有内容。

如果您确实为级联删除配置了密钥,则删除顶部项(parent_id = 0)将删除所有依赖和子部分的行。在这种情况下,删除第一行将清空表。