mysql - 将多个删除查询组合成更少?

标签 mysql sql query-optimization

我对一个函数不满意,该函数从表中删除了一个产品。

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

这归结为两个选择查询和六个删除查询。

有什么方法可以减少数据库密集度吗?

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;

该查询没有向我抛出任何错误,但我想知道它是否会执行我想要的操作?

请注意,每个表中的行数会有所不同,那么 inner join 是右连接吗?

最佳答案

ON DELETE CASCADE 中使用外键

关于mysql - 将多个删除查询组合成更少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13471895/

相关文章:

mysql - 仅显示百分比后的 2 个数字

MySQL 选择具有最新日期的记录

mysql - 如何选择表中 ID 最大的整行?

sql - 每组的结果

sql - 在SQL Server 2012列中查询JSON

mysql - 为什么 MySQL 在此查询中显示 index_merge?

sql-server - 如何强制SQL Server在WHERE子句之前处理CONTAINS子句?

mysql - 如何搜索结果而不关心自动完成框中的任何点 (". ")?

javascript - TypeORM 中的 ColumnTypeUndefinedError

mysql - 优化包含 WHERE 和 ORDER BY 的 MySQL UPDATE 查询?