MySQL-使用联合从多个表中删除?
我的表都有相同的列,并以这种方式将它们分开以保持它们的小 e、 g。 表-CPU、GFXcard、监视器。 列-标题ID、类别ID、名称 我想做的与此类似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语句。可能是这样的:
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
作为主键的一部分,或者将其用于分区方案。我认为使用多个语句不会返回所有受影响的行。只返回最后一条语句中受影响的行。