mysql можно ли сделать вставку во вставку? - PullRequest
1 голос
/ 13 марта 2012

я делаю клонирование старой базы данных в новую с другой структурой, но в ней должны быть те же старые данные

возможно ли сделать вставку в вставку , которая возвращает id запроса вставки

INSERT INTO tab1 (nom,id_2) VALUES
("jack",(INSERT INTO tab2 (pass) VALUES ("1234")));

в INSERT INTO tab2 (pass) VALUES ("1234") я хочу получить идентификатор вставки

но не повезло !! (Я хочу это в одном запросе sql (я уже знаю о mysql_insert_id))

заранее спасибо

Ответы [ 4 ]

4 голосов
/ 13 марта 2012

Вы не можете сделать это по одному запросу - используйте mysql_insert_id () , чтобы получить последний вставленный идентификатор, например:

mysql_query('INSERT INTO tab2 (pass) VALUES ("1234")');
$lastid =  mysql_insert_id();
mysql_query('INSERT INTO tab1 (nom,id_2) VALUES ("jack",'.$lastid.')');
3 голосов
/ 13 марта 2012

идентификатор вставки также может быть получен в mysql, так что вот версия без участия PHP (однако она выполняет 2 запроса)

INSERT INTO tab2 (pass) VALUES ("1234");
INSERT INTO tab1 (nom,id_2) VALUES("jack",LAST_INSERT_ID());
1 голос
/ 13 марта 2012

Вы не можете сделать это как одну вставку, потому что вставки являются атомарными, то есть идентификатор не будет определен до завершения инструкции.

Оберните оба заявления в транзакцию, и вы получите свой идентификатор и атомарность.

1 голос
/ 13 марта 2012

Блокировка таблицы, вставка, выбор макс (id), разблокировка таблицы. Это единственный выход за пределы создания ваших собственных таблиц последовательностей, как в postgres, если вы по какой-то причине отрицательно относитесь к функциям последней вставки id. Однако этот подход будет похож на заливку смолы в блендер, если ваша таблица выполняет средние или высокие записи.

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