MySQL: Обновление при дублировании ключа ON DUPLICATE KEY

Обновление записи в таблице при дублировании ключа с помощью MySQL.

Создадим тестовую таблицу, куда будем записывать id пользователя (uid), основной цвет (primary_color), время записи (time). Поле uid является уникальным.


CREATE TABLE test (
	id INT UNSIGNED NOT NULL AUTO_INCREMENT,
	uid INT UNSIGNED NOT NULL,  
	primary_color VARCHAR(20) NOT NULL,
	time INT UNSIGNED NOT NULL,
	PRIMARY KEY(id),
	UNIQUE KEY(uid)
) ENGINE=InnoDB;

Добавим запись в таблицу для пользователя с id = 1. Значение цвета будет рандомным из встроенного набора данных.


INSERT INTO 
		`test`
	(
		`uid`, 
		`primary_color`, 
		`time`
	)
	VALUES
	(
		1, 
		elt(floor(rand() * 3 + 1), 'red', 'green', 'blue'), 
		UNIX_TIMESTAMP()
	)

Попытка повторно выполнить этот SQL-запрос приведёт к ошибке: #1062 - Дублирующаяся запись '1' по ключу 'uid'

Для корректного выполнения нужно добавить конструкцию ON DUPLICATE KEY UPDATE. В примере указано, что при дублировании ключа нужно обновить значения цвета и времени.


INSERT INTO 
		`test`
	(
		`uid`, 
		`primary_color`, 
		`time`
	)
	VALUES
	(
		1, 
		elt(floor(rand() * 3 + 1), 'red', 'green', 'blue'), 
		UNIX_TIMESTAMP()
	)
ON DUPLICATE KEY UPDATE 
		`primary_color` = VALUES( `primary_color` ),
		`time` = VALUES( `time` )


MySQL просмотров: 93