Tag Archives: ON DUPLICATE KEY UPDATE
MySQL DUPLICATE KEY UPDATE
Забавно получилось: давно написал, как сделать ON DUPLICATE KEY UPDATE для SQL Server и ON DUPLICATE KEY UPDATE для PostgreSQL, а «оригинал» не описал.
Аналог ON DUPLICATE KEY UPDATE SQL Server
Есть таблица для записи статистики за день
1 2 3 4 5 |
CREATE TABLE mailStats ( dt DATE NOT NULL CONSTRAINT PK_mailStats PRIMARY KEY, total INT NOT NULL, failed INT NOT NULL, ); |
Нужно записать в неё общее количество действий и количество фэйлов скриптом, запускающимся по крону к примеру раз в час. При этом мы не знаем, создана ли запись на сегодняшний день, а выполнить всё хочется за один запрос. Тут бы на помощь пришёл «ON DUPLICATE KEY UPDATE» от …
Postgresql-аналоги myslq-евской «ON DUPLICATE KEY UPDATE»
В mysql есть очень удобная конструкция
1 |
INSERT INTO table (columns) VALUES (values) ON DUPLICATE KEY UPDATE column1=value1, column2=value2 |
Это очень удобно тогда, когда нужно вставить только те данные, которых в таблице нет (при этом в апдейте указывается уже существующее значение поля). В postgresql такого, к сожалению, нет. Но подобное поведение можно сэмулировать несколькими способами. Два самых интересных: