Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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 - Fatal编程技术网

MySQL-使用联合从多个表中删除?

MySQL-使用联合从多个表中删除?,mysql,Mysql,我的表都有相同的列,并以这种方式将它们分开以保持它们的小 e、 g。 表-CPU、GFXcard、监视器。 列-标题ID、类别ID、名称 我想做的与此类似 SELECT * FROM cpus UNION SELECT * FROM gfxcards; DELETE FROM test WHERE (titleId,categoryId) IN ((2,0)); 有没有办法做到这一点,或者我必须使用事务来避免多个delete查询?您可以使用join语法执行多表delete语句。可能是这样的:

我的表都有相同的列,并以这种方式将它们分开以保持它们的小

e、 g。 表-CPU、GFXcard、监视器。 列-标题ID、类别ID、名称

我想做的与此类似

SELECT * FROM cpus
UNION
SELECT * FROM gfxcards;
DELETE FROM test WHERE (titleId,categoryId) IN ((2,0));

有没有办法做到这一点,或者我必须使用事务来避免多个delete查询?

您可以使用join语法执行多表delete语句。可能是这样的:

delete from cpus, gfxcards using cpus, gfxcards where cpus.titleId = gfxcards.categoryId;

这是因为这些表是相关的。否则,您可以使用存储过程或函数。

MySQL支持同时从多个表中删除。然而,为什么不直接进行三次删除呢

delete from cpus where titleId = 2 and categoryId = 0;
delete from monitors where titleId = 2 and categoryId = 0;
delete from gfxcards where titleId = 2 and categoryId = 0;
如果您需要这些是原子的,那么将它们封装在单个事务中。然后,当事务提交时,所有删除都将发生


顺便说一句,这就是为什么您不想要这样的并行表的原因之一。实际上,您应该有一个带有指定对象的类型列的表。

啊,没关系。我算出了我要找的问题。e、 g.要从“CPU”表中删除ID为4,7的CPU,并从“监控器”表中删除ID为105106的监控器,请执行以下单个查询

删除
c、 m来自CPU c,监视器m
哪里
(c.titleId,c.categoryId)IN((4,0)、(7,0))
及
(m.titleId,m.categoryId)在((105,3)、(106,3))中;

但是感谢回复=)

但是如果我把所有这些表放在一个表中,并说这些表可能是一个小的500000条记录,而不是一个大的1500000条记录,MySQL搜索较小的表会更快吗?我之所以将它们拆分成单独的表,除了使它们保持较小之外,还因为并非所有类别都将在任何时候使用。@Ken。使用索引,500k和1500k记录的搜索时间应该基本相同。如果要优化类别,可以将
categoryID
作为主键的一部分,或者将其用于分区方案。我认为使用多个语句不会返回所有受影响的行。只返回最后一条语句中受影响的行。