处理(非)现有数据

Handle (non)existing data

我有一个 table,其中包含用户、类别和数量的列。 用户可以从每个类别中购买一定数量的产品。我只想存储最后一次购买。

User Category Amount
1    100      15
1    103      25

假设此用户刚从 100 或 110 购买了 30 件。附加类别或新类别。这可以使用以下伪代码来处理:

SELECT amount FROM table WHERE user=1 AND category=100
if row exists
   UPDATE table SET amount=30 WHERE user=1 AND category=100
else
   INSERT INTO table (user, category, amount) VALUES(1, 100, 30)

另一种方法是,始终删除旧值(不存在时忽略错误消息(并始终插入新值。

DELETE FROM table WHERE user=1 AND category=100
INSERT INTO table VALUES(1, 100, 30)

从性能的角度来看,这些模式中的哪一个是首选? 存在哪个PK和FK重要吗?

mysql支持replace,所以不需要deleteinsertupdate。但是这个假定您的 table 上有一个唯一键或主键作为参考

REPLACE 
  INTO yourtable  (user, category, amount) 
  VALUES (1, 100, 30);