Стандартная проблема в приложениях - вставить запись, если она не существует, или обновить, если она существует. В случаях, когда PRIMARY KEY
неизвестно, это обычно решается путем выдачи SELECT
и последующего запуска либо INSERT
или UPDATE
, если запись была найдена.
Тем не менее, мне кажется, что есть как минимум три способа, которыми вы можете вставить запись в базу данных, даже если запись уже существует. Лично я предпочел бы отбросить новый запрос на вставку, если он уже существует, но в некоторых случаях вы могли бы отбросить запись в базе данных и использовать новый.
CREATE TABLE IF NOT EXISTS `table` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`foo` int(10) unsigned NOT NULL,
`bar` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `row` (`foo`,`bar`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Вот три метода:
INSERT IGNORE INTO table (foo, bar) VALUES (2,3);
INSERT INTO table (foo, bar) VALUES (2,3) ON DUPLICATE KEY UPDATE;
REPLACE INTO table (foo, bar) VALUES (2,3);
В какое время следует использовать каждый из этих методов?
Может кто-нибудь привести примеры правильных сценариев использования?