#mysql
#mysql
Вопрос:
Вставка нескольких записей в таблицу в MYSQL возвращает мне последний вставленный идентификатор.
Есть ли способ, которым я могу получить список всех вставленных записей?
Одним из способов было бы вставить каждую запись, а затем извлечь эту запись, используя последний вставленный идентификатор. Но, очевидно, это вызовет проблемы с производительностью.
Комментарии:
1. Единственный способ, который я могу придумать для этого, — сохранить все старые идентификаторы во временной таблице, вставить новые записи, затем вернуть все идентификаторы, которые не существуют во временной таблице.
2. Есть ли в вашей таблице
creation_time
столбец? Вы можете сохранить время, когда вы начали вставлять, затем выбрать все записи, добавленные в это время или после него.3. Я не уверен, что использование нескольких инструкций вставки одной строки по сравнению с одной инструкцией вставки нескольких строк действительно сильно снижает производительность, если вы не отправляете каждую инструкцию вставки одной строки отдельно в свою базу данных. Таким образом, за каждой вставкой в одну строку может следовать инструкция для получения идентификатора записи каждой вставки, созданного этой вставкой. Однако вам придется собрать разные идентификаторы строк в массив или строку и отправить их обратно в любой код, который инициировал вставки, что, кроме использования оператора select from dual, я не знаю, как вы могли бы сделать.
4. @Barmar У меня нет списка старых идентификаторов, потому что я хочу создать несколько записей. Как вы упомянули, у меня также возникла идея вставлять записи, а затем сортировать по creation_time и ограничивать его количеством запрошенных записей. Но в конечном итоге я добавил параметр запроса к своему POST-запросу, чтобы ограничить записи. Тем не менее, спасибо за ваше время.
5. Моя идея заключалась в том, что вы должны были создать список старых идентификаторов перед вставкой:
CREATE TEMPORARY TABLE old_ids AS SELECT id FROM yourTable
. Затем выполните все вставки, и вы сможете получить все новые идентификаторы сSELECT id FROM yourTable WHERE id NOT IN (SELECT id FROM old_ids)