Я хочу вставить несколько строк в таблицу, используя один оператор INSERT
. Это не проблема, поскольку SQL предлагает возможность предоставить несколько строк в качестве параметра для одного оператора INSERT
. Теперь эти строки содержат поле ID
, которое увеличивается автоматически, т.е. его значение задается базой данных, а не моим кодом.
В результате я хотел бы получить значения ID
вставленных строк. Мой основной вопрос: как мне это сделать для MariaDB / MySQL?
Как оказалось, это довольно просто, например в PostgreSQL, поскольку PostgreSQL имеет предложение RETURNING
для INSERT
, которое возвращает требуемые значения для одной или даже для нескольких строк. Это именно то, что я хочу, и это работает.
К сожалению, ни в MariaDB, ни в MySQL нет предложения PostgreSQL RETURNING
, поэтому мне нужно вернуться к чему-то, например LAST_INSERT_ID()
, но это возвращает только ID
одной последней вставленной строки, даже если было вставлено несколько строк используя один INSERT
. Как получить все значения ID
?
Мой код в настоящее время выглядит так:
INSERT INTO mytable
(foo, bar)
VALUES
('fooA', 'barA'),
('fooB', 'barB');
SELECT LAST_INSERT_ID() AS id;
Как я могу решить эту проблему так, чтобы она работала даже при одновременной записи?
(И нет, нельзя изменить поле UUID или что-то подобное; поле автоинкремента задано, и его нельзя изменить.)