INSERT не работает, когда следует SELECT LAST_INSERT_ID - PullRequest
3 голосов
/ 08 марта 2019

Есть много вопросов по поводу LAST_INSERT_ID()

В моем случае проблема заключается в следующем:

Когда за INSERT следует SELECT LAST_INSERT_ID() нет вставляемых записей

INSERT INTO sequences (state)  VALUES (0);
select LAST_INSERT_ID();
>>> 80  // nothing is added to DB

INSERT на своих работах ОК

INSERT INTO sequences (state)  VALUES (0);
>>>
select LAST_INSERT_ID();
>>> 81 // row is inserted

Для тестирования я использую SequelPro, DB - это RDS MySQL от Amazon.Та же проблема возникает, когда я использую модуль MySQLdb Python.

В идеале я хочу вставить строку, получить ее ID для дальнейшей идентификации и использования.

1 Ответ

3 голосов
/ 08 марта 2019

Вы должны запускать один запрос за раз. Большинство интерфейсов SQL не допускают множественных запросов.

MySQL позволяет завершить один запрос ;, но если после ; (кроме комментария) есть какие-либо слова, это будет синтаксическая ошибка, которая приведет к сбою всего запроса. Таким образом, INSERT не будет работать.

В MySQL есть опция подключения, разрешающая множественные запросы, но по умолчанию она не активна. Смотри https://dev.mysql.com/doc/refman/8.0/en/c-api-multiple-queries.html

На самом деле нет причин использовать несколько запросов. Просто запустите SELECT LAST_INSERT_ID() как отдельный запрос, следующий за INSERT. Пока вы используете одно и то же соединение, оно даст вам правильный ответ.

...