Мне нужно выполнить очень простую операцию с базой данных - положить некоторые значения в таблицу по ключу, если строка существует - обновить ее, если нет - создать новую.Проблема в том, что мне нужно сделать это переносимым способом - то есть один и тот же запрос должен работать на MySQL, SQL Server, Oracle и предпочтительно также на DB2, Postgres и т. Д. Поэтому, хотя я мог бы использовать REPLACE
или INSERT ... ON DUPLICATE KEY UPDATE
в MySQLЯ не уверен, что они будут поддерживать такой синтаксис.И я действительно хочу избежать, если по типу базы данных, потому что это было бы невозможно поддерживать.Я также не хочу на самом деле запрашивать значение перед обновлением, потому что я подозреваю, что это значительно замедлит процесс (мне нужно сделать это несколько раз).
Пока что лучшее, что я придумал, это просто делать:
UPDATE table SET data='data' WHERE key='key';
INSERT INTO table(key, data) VALUES ('key', 'data');
один из них всегда будет успешным, а другой - неудачным, но мне все равно, что один из запросов завершится неудачей.Это выглядит как-то не элегантно.Любые предложения, как сделать это лучше?