sql >> Base de Datos >  >> RDS >> Mysql

SOBRE ACTUALIZACIÓN DE CLAVE DUPLICADA implementación/diseño

Primero necesita un índice único en (usersessid, product_id) . No estoy seguro de si realmente está utilizando la columna generada automáticamente id , pero si no, debe cambiar la clave principal a (usersessid, product_id) . Luego, en lugar de ejecutar un UPDATE separado consulta, solo ejecute un solo INSERT consulta:

INSERT INTO sessionBasket (userid, usersessid, date_added, product_id, qty, notes)
VALUES (?, ?, now(), ?, ?, ?)
ON DUPLICATE KEY UPDATE qty = qty + ?

Solo para dejar en claro cómo debería verse el índice único:

CREATE UNIQUE INDEX sessionBasket_uniq ON sessionBasket (usersessid, product_id);

O clave principal:

ALTER TABLE sessionBasket ADD CONSTRAINT sessionBasket_pkey PRIMARY KEY (usersessid, product_id);