поиск значения столбца после ОБНОВЛЕНИЯ ДУБЛИКАТА КЛЮЧА

#mysql

#mysql

Вопрос:

Рассмотрим это утверждение:

 INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE d=d 1;
  

Мне нужно значение d .

Возможно ли получить его, не выполняя дальнейших SELECT действий?

Существует уникальный индекс на a,b,c . Будет ли этот индекс использоваться для повышения производительности? В этой таблице будет большое количество строк.

Комментарии:

1. Возможно, вы могли бы сделать это в хранимой процедуре, но нет способа извлечь это из того же оператора, о котором я знаю.

2. Если у вас составной уникальный индекс, a b c то ваш запрос может иногда завершаться ошибкой, когда c=c 1 не создается уникальная комбинация.

3. О, вы правы, это не C, это другое поле, D, например

Ответ №1:

Предполагая, что вы будете запускать оба запроса, используя одно и то же соединение, вы можете использовать LAST_INSERT_ID(expr) функцию для установки текущего значения d и проверить значение LAST_INSERT_ID() вместе с ROW_COUNT() функцией, чтобы узнать, была ли запись вставлена или обновлена:

 INSERT INTO table (a,b,c)
VALUES (1,2,3)
ON DUPLICATE KEY UPDATE d = LAST_INSERT_ID(d   1);

SELECT IF(ROW_COUNT() = 2, LAST_INSERT_ID(), 0 /*default value*/) ;
  

Вы также можете использовать переменные сеанса:

 INSERT INTO table (a,b,c)
VALUES (1,2,3)
ON DUPLICATE KEY UPDATE d = @tmp := (d   1);

SELECT IF(ROW_COUNT() = 2, @tmp, 0 /*default value*/) ;