MySQL - INSERT INTO SELECT (ВСТАВИТЬ INTO ...) - Вложенная вставка в - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь вставить две строки в разные таблицы одновременно. Значение основного запроса INSERT INTO AUTO_INCREMENT или id (если оно уже существует) должно быть записано в основном запросе.

В настоящее время у меня есть это (упрощено всего с 3 значениями), но оно не работает. Мне интересно, есть ли лучший способ сделать это.

INSERT IGNORE INTO access(`entryid`, `logid`, `urlid`)  
   SELECT '0', '1', (INSERT IGNORE INTO urls(`url`) VALUES('example.com'));

Я, очевидно, могу сделать несколько отдельных запросов для этой цели, но я думаю, что вставка его в один запрос повышает надежность моего кода (как это никогда не может "провалиться" на полпути через свои запросы). Я просто ищу вложенное решение INSERT INTO.

1 Ответ

1 голос
/ 23 января 2020

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

Пример на основе вашего запроса:

START TRANSACTION;
INSERT IGNORE INTO urls(`url`) VALUES('example.com');
INSERT IGNORE INTO access(`entryid`, `logid`, `urlid`) VALUES (0, 1, LAST_INSERT_ID());
COMMIT;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...