我有一个看起来像这样的数据库:
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插入/更新。我最初的想法是只插入它们,但是如果这样做,数据库将不知道是否删除了标签)
我现在正在做的事情很好,但是这种事情总是出现,似乎应该有一种更好的方法,没有太多的数据库调用。
如果您正在使用事务来做到这一点,那很好。
我唯一能想到的策略问题是,如果数据库在操作过程中关闭,但是事务解决了这个问题。
我不对未更改为的标签进行删除/插入:
当然,在某些情况下,删除/插入完全可以,但这是我的一般规则:请勿修改未更改的数据。
所以在这种情况下,我的方法是:
DELETE FROM
tags
WHERE
product_id = 10000
AND tag NOT IN ('tag1', 'tag2', 'tag3')
;
INSERT (...) VALUES (...), (...), ... ON DUPLICATE KEYS UPDATE ...