Russian Qt Forum

Программирование => Базы данных => Тема начата: lex_newton от Август 13, 2010, 12:39



Название: how to get last insert or update id
Отправлено: lex_newton от Август 13, 2010, 12:39
Собственно, вопрос:

Среда:
    MySQL 5.0.X, mysql storage procedure

Имею запрос вида:

Код:
INSERT INTO
    t( x, y )
VALUES
    ( a, b )
ON DUPLICATE KEY UPDATE
    y = b;

Таблица имеет поля:
id : int, primary key, autoincrement
x  : int, unique
y  : int

После выполнения этого запроса в таблицу либо добавляется новая строка, либо обновляется существующая.

Задача:
получить id добавленной или обновленной строки.

При добавлении можно взять id путем LAST_INSERT_ID()

Как получить id после обновления - непонятно. Единственное решение, которое мне приходит в голову - это сделать select:
Код:
select id into last_id from t where x = a;

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

Может быть есть какое-то другое решение данной проблемы?


Название: Re: how to get last insert or update id
Отправлено: Пантер от Август 13, 2010, 16:25
Код
SQL
INSERT INTO
   t( x, y )
VALUES
   ( a, b )
ON DUPLICATE KEY UPDATE
   y = b
RETURN id
 
Что-то типа этого где-то встречал.