Как обновить, если поле существует для определенного столбца - PullRequest
1 голос
/ 31 октября 2019

У меня проблема с моими запросами, я должен обновить свое существующее поле и не делать вставку, потому что он будет дублирован, и я уже знаю ON DUPLICATE KEY UPDATE или REPLACE, но он не работает, цель состоит в том, чтобыобновить количество моего продукта, а не вставлять некоторые. Я пробовал с помощью триггеров, но это тоже не работает, у вас есть решение моей проблемы?

INSERT INTO cart(product_id, quantity) VALUES (4, quantity +1 )

Но если продукт уже существует, он добавляет мне строку, и я хотел бы, чтобы она автоматическиобнаружить его, чтобы обновить, зная, что мое поле не является ключом

UPDATE cart SET quantity = quantity+1 WHERE id= id

И это мой триггер:

BEGIN
IF EXISTS (SELECT product_id FROM cart WHERE product_id = NEW.product_id)
THEN
    UPDATE cart SET quantity = NEW.quantity WHERE id = NEW.user_id;
ELSE
    INSERT INTO cart(product_id, quantity) VALUES (NEW.product_id, NEW.quantity);        
END IF;  

END

Это проблема:Две строки идентичны, и я хотел бы для этого примера одну строку, как в строке с идентификатором 1

Проблема изображения Expalin

Спасибо большое и извините за мой английский и выражение

1 Ответ

2 голосов
/ 31 октября 2019

Нет необходимости в триггере. Вы можете использовать MySQL insert ... on duplicate key синтаксис .

insert into cart(product_id, quantity) 
    values (4, 1)
    on duplicate key update quantity = quantity + values(quantity)

Чтобы это работало, вам нужно уникальное ограничение (или ограничение первичного ключа) для столбца product_id.

С этим синтаксисом, если запись уже существует с тем же product_id, что и та, которую вы пытаетесь вставить, вместо этого выполняется update, который добавляет новый quantity к существующей записи.

...