Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL删除多个表中的多行_Mysql_Sql - Fatal编程技术网

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(删除级联)选项将强制删除子项。如果您不想级联删除,则事务处理似乎是一个好主意,或者我猜此代码不会删除空的子类别?空的子类别意味着?我指的是不包含任何项目的子类别。事实上,此代码将删除特定类别,此类别下的所有子类别以及这些子类别下的所有项目是的,您是对的。在这种情况下,用左连接替换最后一个内部连接