Обрабатывать (не) существующие данные - PullRequest
0 голосов
/ 15 октября 2019

У меня есть таблица, которая состоит из столбцов для пользователей, категорий и количества. Пользователь может купить количество продуктов из каждой категории. Я хочу хранить только самую последнюю покупку.

User Category Amount
1    100      15
1    103      25

Представьте себе, что этот пользователь только что купил 30 штук из 100 или из 110. Либо дополнительная категория, либо новая категория. Это может быть обработано с использованием следующего псевдокода:

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?

1 Ответ

0 голосов
/ 15 октября 2019

mysql поддерживает replace, поэтому нет необходимости в delete insert или update. Но этот предполагает уникальный ключ или первичный ключ в вашей таблице в качестве ссылки

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