在MySQL中插入/更新多行的正确方法是什么?我做对了吗?

问题描述 投票:0回答:2

我有一个看起来像这样的数据库:

id | product_id | tag
------------------------
1  | 10000      | tag1
------------------------
2  | 10000      | tag2 
------------------------
3  | 10000      | tag3
------------------------
4  | 10001      | tag2 
------------------------
5  | 10002      | tag1
------------------------
6  | 10002      | tag2 

[我们每天都在Web服务中检查标签的更新列表,然后更新数据库。该数据库包含50,000种产品,因此我们一次只能检查100种产品。

[当前,当我检查每个产品(例如product_id 10000)时,我只会删除所有行(从表WHERE product_id = 10000中删除)然后一一插入所有标签。

我想知道是否有更好的方法可以做到这一点(我正在考虑类似于“插入到...在重复键更新上...”的事情,当我在一行中时, m插入/更新。我最初的想法是只插入它们,但是如果这样做,数据库将不知道是否删除了标签)

我现在正在做的事情很好,但是这种事情总是出现,似乎应该有一种更好的方法,没有太多的数据库调用。

mysql insert-update
2个回答
0
投票

如果您正在使用事务来做到这一点,那很好。

我唯一能想到的策略问题是,如果数据库在操作过程中关闭,但是事务解决了这个问题。


0
投票

我不对未更改为的标签进行删除/插入:

  • ID将更改(有时可能很重要)
  • 它可能是无缘无故执行的触发器

当然,在某些情况下,删除/插入完全可以,但这是我的一般规则:请勿修改未更改的数据。

所以在这种情况下,我的方法是:

DELETE FROM
    tags
WHERE
    product_id = 10000
    AND tag NOT IN ('tag1', 'tag2', 'tag3')
;

INSERT (...) VALUES (...), (...), ... ON DUPLICATE KEYS UPDATE ...
© www.soinside.com 2019 - 2024. All rights reserved.