SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 26.05.2011 15:34:30

NT Man
Участник
Зарегистрирован: 07.06.2008
Сообщений: 16

Получение следующего ID без вставки записи

Т.е. надо без костылей узнать и захватить следующий ID-шник поля autoincrement для последующих массовых операций над вновь вставленной записью.

Вот вариант костыльной реализации:

INSERT table a (id) value (null);
SET var_a_id = LAST_INSERT_ID();
ROLLBACK;


В результате получаем текущее значение автоинкремента одновременно увеличивая его, чтобы эту запись не захватил никто другой.

Неактивен

 

#2 26.05.2011 16:09:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Получение следующего ID без вставки записи

Предлагаю радикальное решение:
BEGIN
  INSERT INTO a ...
  SELECT @a := LAST_INSERT_ID();
  другие операции, включающие @a
COMMIT;

Неактивен

 

#3 26.05.2011 17:03:28

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Получение следующего ID без вставки записи

А принципиально то значение, которое сгенерирует база? Вы же можете при вставке писать то id, которое Вам нужно. Взяли MAX(`id`) и изменили его как надо.
Если возникнет мысль об актуальности, что пока "туда-сюда", добавятся несколько записей, то в Вашем примере та же проблема, хотя в обоих случаях легко решается smile


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#4 27.05.2011 11:20:01

NT Man
Участник
Зарегистрирован: 07.06.2008
Сообщений: 16

Re: Получение следующего ID без вставки записи

paulus написал:

Предлагаю радикальное решение:

А если между моментом когда мы должны "взять ID" до момента реальной вставки проходит какое-то время, и это вообще разные транзакции?

Неактивен

 

#5 27.05.2011 12:34:53

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Получение следующего ID без вставки записи

Разные транзакции это быть не должны ©Yoda.

Транзакции нужны именно для того, чтобы одновременно или закоммитить
или откатить. Просто вытаскивать чиселки идеологически не хорошо, т.к.
у Вас будут полупримененные куски, это плохо. Если же Вас устраивают
полупримененные куски — просто вставьте строку в нужное место, возьмите
ее id и используйте его в других транзакциях wink

Неактивен

 

Board footer

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