Пример:
A - unique
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
Если а в таблице есть a=1, то это тоже самое что:
UPDATE table SET c=c+1 WHERE a=1;
Более понятный пример, обьясняющий "как это все начиналось":
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE b=b, c=c;
Если вставлять много строк одновременно в одном интсрте, то придет на помощь функция VALUES() -- эта функция вне конструкции INSERT ... ON DUPLICATE KEY UPDATE всегда вернет NULL :
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
Это эквивалентно:
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=3; INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=9;
Есть интересная задача. К примеру у нас есть в таблице праймери кей с автоинкриментом и уникальная колонка А. Мы пользуемся этой славной конструкцией, но желаем, если сработает апдейт, то айдишник должен стать последним инкрементом в таблице, а не остаться со старым. Это делается так:
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), b=2, c=3;
Комментариев нет:
Отправить комментарий