MySQL删除多个表中的多行
是否有一种方法可以在一次查询中同时从三个表中删除多条记录 类别:MySQL删除多个表中的多行,mysql,sql,Mysql,Sql,是否有一种方法可以在一次查询中同时从三个表中删除多条记录 类别:id,名称子类别:id,类别id, 名称项目:id,子类别\u id,名称 我有需要删除的类别的id。例如,5 SQL查询必须删除id为的类别 categories.id = 5 此外,它还必须删除该类别中的所有子类别 sub_categories.category_id = categories.id 最后,从步骤2中删除的子类别中删除所有项目 items.subcategory_id = sub_categories.id
id,名称
子类别:
id,类别id, 名称项目:
id,子类别\u id,名称 我有需要删除的类别的
id
。例如,5
SQL查询必须删除id为的类别
categories.id = 5
此外,它还必须删除该类别中的所有子类别
sub_categories.category_id = categories.id
最后,从步骤2中删除的子类别中删除所有项目
items.subcategory_id = sub_categories.id
试试
CREATE TABLE categories(
id int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id )
) ENGINE=InnoDB;
CREATE TABLE sub_categories(
id int(11) NOT NULL AUTO_INCREMENT,
category_id int(11) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (category_id)
REFERENCES categories (category_id)
ON DELETE CASCADE
) ENGINE=InnoDB;
如果在delete CASCADE
上使用引入外键约束,则可以从多个表中删除
这是另一种方式:
DELETE C,SC,I
FROM categories C
INNER JOIN sub_categories SC ON C.id = SC.category_id
INNER JOIN items I ON SC.id = I.subcategory_id
WHERE C.id = 5;
检查这个
编辑:
如果子类别下没有任何项目,则需要将最后一个内部联接
替换为左联接
DELETE C,SC,I
FROM categories C
INNER JOIN sub_categories SC ON C.id = SC.category_id
LEFT JOIN items I ON SC.id = I.subcategory_id
WHERE C.id = 5;
外键。。当父项被删除时,ON DELETE CASCADE(删除级联)选项将强制删除子项。如果您不想级联删除,则事务处理似乎是一个好主意,或者我猜此代码不会删除空的子类别?空的子类别意味着?我指的是不包含任何项目的子类别。事实上,此代码将删除特定类别,此类别下的所有子类别以及这些子类别下的所有项目是的,您是对的。在这种情况下,用左连接替换最后一个内部连接