2016-12-24 6 views
0

У меня есть следующая таблица карты с уникальным ключом на столбце Имя:Получить последний идентификатор из вновь вставленного элемента, или существующий

id | name 
1 aaa 
2 bbb 
3 ccc 

Я хочу, чтобы получить вновь созданный идентификатор, если я вставить новое значение в этой таблице, как это:

INSERT IGNORE INTO map VALUES(null, 'ddd'); 

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

INSERT IGNORE INTO map VALUES(null, 'ccc'); 

Возможно ли это сделать с одним SQL, и без проверки, если запись существует, и т.д.?

+0

'getLastId()' не даст вам значение «идентификатор "даже на вставке. Идентификатор в вашем случае - «имя». И у вас уже есть «имя». Это более концептуальная вещь, на которую я бы сказал. – hakre

ответ

1

Я думаю, что вы должны пройти лишнюю милю для этого один: проверка

  • , если существует - когда так: получить идентификатор этого имени
  • если нет: SELECT LAST_INSERT_ID();
1

Зависит что квалифицируется как один запрос.

Когда вы делаете использование INSERT INTO ... ON DUPLICATE KEY UPDATE вы можете контролировать LAST_INSERT_ID() таким образом, что он возвращает новый идентификатор на вставке и идентификатор строки «обновленного» на обновление:

INSERT INTO map (name) VALUE ('ccc') 
    ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id); 

Это сделает LAST_INSERT_ID() затем вернуть map.id строки, вы заинтересованы в.

Вне зависимости от API является то, что вы называете, как getLastId() (я не знаю, так что я не могу предоставить больше указателей на него), это не может работать, и вам нужно будет запустить второй запрос для получения это:

SELECT LAST_INSERT_ID(); 

Смотрите так же:

Смежные вопросы