Вы хотите INSERT ON DUPLICATE KEY UPDATE
:
INSERT INTO StoredTimestamps (Name, Timestamp)
VALUES (timestampKey, COALESCE(timestampValue, NOW()) )
ON DUPLICATE KEY UPDATE Timestamp = VALUES(timestampValue);
ON DUPLICATE KEY
устанавливает Timestamp
для вставляемого значения, когда Name
уже существует.
Для этогодля работы вам нужен уникальный индекс / ограничение для Name
:
ALTER TABLE StoredTimestamps ADD CONSTRAINT unq_StoredTimestamps_Name UNIQUE (Name);
В хранимой процедуре я также буду осторожен с соглашениями об именах:
CREATE PROCEDURE usp_AddUpdateTimestamp (
IN in_timestampKey VARCHAR(50),
IN in_timestampValue TIMESTAMP)
)
BEGIN
INSERT INTO StoredTimestamps (Name, Timestamp)
VALUES (in_timestampKey, COALESCE(in_timestampValue, NOW()))
ON DUPLICATE KEY UPDATE Timestamp = VALUES(timestampValue)
END;
Я предпочитаю usp_
, а не sp_
из-за моей истории использования SQL Server, где sp_
не рекомендуется, поскольку он используется для системных хранимых процедур.Это просто привычка и не имеет отношения к MySQL.