SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.07.2009 00:23:55

Трам-Трамыч
Участник
Зарегистрирован: 17.07.2009
Сообщений: 2

Вложенный INSERT и уникальный идентификатор

Есть примерно такая таблица:

CREATE  TABLE IF NOT EXISTS `librea`.`user` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NULL ,
  `surname` VARCHAR(45) NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


И многострочный инсерт:

INSERT INTO `user` (`name`, `surname`) VALUES
('name 1', 'surname 1');
('name 2', 'surname 2');
...
('name N, 'surname N');


Нужно чтобы запрос возвращал сгенерированные при вставке значения поля id, которые использовались бы в другом INSERT-запросе.
Помогите, пожалуйста.

Неактивен

 

#2 17.07.2009 00:54:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Вложенный INSERT и уникальный идентификатор

В многострочном инсерте значения строк разделяются запятыми

INSERT INTO `user` (`name`, `surname`) VALUES
('name 1', 'surname 1'),
('name 2', 'surname 2'),
...
('name N, 'surname N');


Не понял суть вопроса. Возможно вам поможет SELECT LAST_INSERT_ID();, возвращающий сгенерированные при вставке значения поля auto_increment.

Неактивен

 

#3 17.07.2009 01:04:59

Трам-Трамыч
Участник
Зарегистрирован: 17.07.2009
Сообщений: 2

Re: Вложенный INSERT и уникальный идентификатор

vasya написал:

Не понял суть вопроса.

Каждой вставленной строке соответствует строка в другой таблице, которая должна ссылаться на id, сгенерированный при вставке. LAST_INSERT_ID() даст результат при однострочном инсерте, но у меня инсерт многострочный. Соответственно LAST_INSERT_ID() возвращает только id первой строки в запросе. Выход один - использовать вложенные запросы, только вот как? 8))

Неактивен

 

#4 17.07.2009 01:11:53

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Вложенный INSERT и уникальный идентификатор

Никак. Вложенных инсертов не бывает.
Избавтесь от многострочного инсерта.

Неактивен

 

#5 10.08.2009 16:48:19

DJK
Завсегдатай
Зарегистрирован: 09.08.2009
Сообщений: 32

Re: Вложенный INSERT и уникальный идентификатор

а что мешает сделать так

LOCK TABLES  user WRITE

SELECT MAX(id) FROM  user

INSERT INTO  `user` (`name`, `surname`) VALUES
('name 1' , 'surname 1' ),
('name 2' , 'surname 2' ),
...
('name N' , 'surname N' );

UNLOCK TABLES

потом к полученому максимальному id прибавим по 1 в цикле до N-1 и полчим все id вставленных элементов элементов

Отредактированно DJK (10.08.2009 17:58:53)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson