Mysql 将多个删除查询合并到更少的查询中?

Mysql 将多个删除查询合并到更少的查询中?,mysql,sql,query-optimization,Mysql,Sql,Query Optimization,我有一个我不满意的函数,该函数从表中删除一个产品 然后还会删除该产品的所有类别、标签和变体, 对于每个变体,删除其所有图像、文档和值 这归结为两个select查询和六个delete查询 有没有一种方法可以让这个数据库不那么密集 delete from $this->table where id = $id delete from $this->clink where product_id = $id delete from $this->tlink where product_

我有一个我不满意的函数,该函数从表中删除一个产品

然后还会删除该产品的所有类别、标签和变体, 对于每个变体,删除其所有图像、文档和值

这归结为两个select查询和六个delete查询

有没有一种方法可以让这个数据库不那么密集

delete from $this->table where id = $id
delete from $this->clink where product_id = $id
delete from $this->tlink where product_id = $id

$variants = select id from $this->vlink where product_id = $id //e.g. (1,2) 

delete from $this->vlink where product_id = $id
delete from cart_variant_values where variant_id in $variants
delete from cart_variant_images where variant_id in $variants
delete from cart_variant_documents where variant_id in $variants
我希望我能做一些类似的事情:

variants = select id from $this->vlink where product_id = $id //e.g. (1,2) 

delete from $this->table where id = $id
delete from $this->clink, $this->tlink, $this->vlink where product_id = $id
delete from cart_variant_values, cart_variant_images, cart_variant_documents  
where variant_id in $variants
但很明显,这是行不通的


编辑(2012年11月21日):

这样行吗

DELETE vi, vv, vd, v, p, pc, pt
FROM cart_variant_images vi 
INNER JOIN cart_variant_values vv 
INNER JOIN cart_variant_documents vd 
INNER JOIN cart_product_variants v ON vd.variant_id = v.id
INNER JOIN cart_products p ON v.product_id = p.id
INNER JOIN cart_products_categories pc ON p.id = pc.product_id
INNER JOIN cart_products_tags pt ON p.id = pt.product_id
WHERE p.id = $id;
这个查询不会给我带来任何错误,但我想知道它是否能满足我的要求


请注意,每个表中将有不同数量的行,因此内部联接是正确联接吗?

在删除级联时使用外键和

在删除级联时使用外键和

总之,数据库也必须这样做

但是,您可以通过编写一个stores过程来最小化连接,该过程在您只需调用一次并向他传递$id和$variants之后删除所有内容


无论如何,最终数据库也必须这样做

但是,您可以通过编写一个stores过程来最小化连接,该过程在您只需调用一次并向他传递$id和$variants之后删除所有内容


@Hailwood或加入,如果您有MyISAM@Hailwood或者,如果您有MyISAMMulti table delete语法,则连接:Multi table delete语法: