Как я могу получить идентификатор нескольких вставленных строк в MySQL? - PullRequest
36 голосов
/ 21 сентября 2011

Я вставляю несколько слов в таблицу из двух столбцов с помощью этой команды:

INSERT IGNORE INTO terms (term) VALUES ('word1'), ('word2'), ('word3');
  1. Как получить идентификатор (первичный ключ) строки, в которой каждое слововставлен.Я имею в виду возвращение значения типа «55,56,57» после выполнения INSERT.Есть ли у MySQL такой ответ?

  2. Столбец термина - UNIQUE.Если термин уже существует, MySQL не вставит его.Можно ли вернуть ссылку для этого дублирования (т. Е. Идентификатор строки, в которой существует термин)?Ответ типа "55, 12 , 56".

Ответы [ 3 ]

35 голосов
/ 21 сентября 2011
  1. Вы получаете его через SELECT LAST_INSERT_ID(); или через вашу фреймворк / библиотеку MySQL (на любом языке), звоните mysql_insert_id().

  2. Это не сработает.Там вы должны запросить идентификаторы после вставки.

2 голосов
/ 21 сентября 2011

Почему бы просто:

SELECT ID
  FROM terms
 WHERE term IN ('word1', 'word2', 'word3')
1 голос
/ 21 сентября 2011

Во-первых, чтобы получить только что введенный идентификатор, вы можете сделать что-то вроде:

SELECT LAST_INSERT_ID() ;

Осторожно, это будет работать только после вашего последнего INSERT запроса и будет возвращать только первый идентификатор , если у вас есть несколько вставок!

Тогда, с опцией IGNORE, я не думаю, что возможно получить строки, которые не были вставлены. Когда вы делаете INSERT IGNORE, вы просто указываете MySQL игнорировать строки, которые должны были бы создать дублирующую запись.

Если вы не включите эту опцию, INSERT будет остановлен, и у вас будет строка, связанная с дублированием.

...