как сделать мульти вставку и получить идентификаторы - PullRequest
4 голосов
/ 21 мая 2010

Я хочу вставить некоторые данные в таблицу

(id PK autoincrement, val)

с использованием мульти вставки

INSERT INTO tab (val) VALUES (1), (2), (3) 

Можно ли получить таблицу последних вставленных идентификаторов?

Я спрашиваю, потому что я не уверен, что все будет в этой форме: (n, n + 1, n + 2).

Я использую mysql inodb.

Ответы [ 2 ]

2 голосов
/ 21 мая 2010

Из документов mysql :

Если вы вставляете несколько строк с помощью одного оператора INSERT, LAST_INSERT_ID () возвращает значение, созданное только для первой вставленной строки.Причина этого в том, чтобы можно было легко воспроизвести ту же инструкцию INSERT для другого сервера.

1 голос
/ 21 мая 2010

Вот кто-то задает тот же вопрос на форумах mysql, но по-настоящему авторитетного ответа не дано. Они приземляются на «Чтобы быть в безопасности, сначала закройте стол. Тогда вы можете считать, что идентификаторы последовательны. '

Мой совет такой:

Если вы вставляете много строк и не возражаете против блокировки других потоков, заблокируйте таблицу, выполните вставки, а затем разблокируйте. Поскольку таблица была заблокирована, вы можете рассчитывать на то, что вставленные идентификаторы будут последовательными (или какими бы ни были ваши настройки автоинкремента).

Если вы делаете небольшое количество вставок или не хотите блокировать другие потоки, просто делайте их по одному и вызывайте last_insert_id () после каждого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...