2011-01-05 72 views
1

因为我有这么多的类别,我创建了一个单一的 “类别” 的数据库表:的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可能吗?

回答

2

查找InnodB,即您的网站目前可能使用的MyISAM类型的数据库引擎,也可以查询Cascade Deletes

InnobDb让你指定表格中的指示之间的关系,然后你可以指定一个动作来判断删除或更新行时会发生什么。

您想将ON DELETE操作设置为CASCADE,这会将删除操作级联到子行及其子行。所以删除父会自动删除所有的孩子,孙子女等

+0

我刚刚阅读mysql文档...似乎工作。非常感谢您的指征。 – morowind 2011-01-05 18:08:34

+0

我没有得到答案吗? :-P – 2011-01-05 18:10:34

+0

我不知道该怎么做!你可以指点我(再:) :)方向... – morowind 2011-01-05 18:26:08

0

数据库表本质上不是树你通常会做的是

DELETE FROM categories WHERE id_category=3 

DELETE FROM categories WHERE id_category=3 AND parent_id=2 
+0

我知道这个。而是创建10个相关的表我想用一个表.. – morowind 2011-01-05 18:06:45

+0

这根本不是可扩展的。避免。 – 2011-01-05 18:11:56

0

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

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

+0

谢谢。我只需要阅读更多mySql文档:) – morowind 2011-01-05 18:13:03