Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Помогите получить автоинкремент (Vadim) 26/10/2006 - 16:58:03
      Re: Помогите получить автоинкремент (ita) 26/10/2006 - 17:31:14
      Re: Помогите получить автоинкремент (Vadim) 26/10/2006 - 18:15:56
      Re: Помогите получить автоинкремент (WebGirl) 28/10/2006 - 22:31:40
      Re: Помогите получить автоинкремент (Vadim) 30/10/2006 - 10:22:58
      Re: Помогите получить автоинкремент (Vadim) 03/11/2006 - 09:41:42
      Re: Помогите получить автоинкремент (Алексей) 21/10/2008 - 10:03:21

> Original message text:
> From: Vadim - 26/10/2006 - 16:58:03
> Subject:Помогите получить автоинкремент
> -----------------
> При создании новой записи использую триггер BEFOR INSERT, чтобы в скрытом поле записи создавалась ссылка, в которой участвует id создаваемой записи. Однако в момент BEFOR INSERT id записи еще не присвоен, так что пытаюсь получить автоинкремент записи через SELECT LAST_INSERT_ID(), но получаю что-то странное - у меня 19 запись, а он мне выдает 59674. У меня такое подозрение, что етот LAST_INSERT_ID() берет последний автоинкремент из всех работающих таблиц вообще, а не из той конкретно, где триггер срабатывает. Как мне его ткнуть носом, чтоб он из этой таблицы id брал? Триггер такой:
>
> BEGIN
> set @New_id = (SELECT LAST_INSERT_ID())+1;
> ...
> END
>
> Знаю что можно увидеть автоинкремент по
>
> SHOW TABLE STATUS FROM db_name like 'table_name'
>
> но как его оттуда выковырять, чтобы использовать можно было?
>


From: Алексей - 21/10/2008 - 10:03:21
Subject:Помогите получить автоинкремент
-----------------
Сразу извиняюсь если пишу не в тему и все это Вы и так знаете:)

Пишу на тот случай если Ваш INSERT делается из клиента, а не из серверных функций, процедур триггеров и т.д.
Я считаю что Вам нужно сначала было сделать INSERT а затем уже вызывать функцию SELECT LAST_INSERT_ID().

К примеру в вашей клиентской программе идут строки
....
mysql_query('INSERT INTO table_name SET...');
и если сразу после этого идет строка
mysql_query('SELECT LAST_INSERT_ID()');
то этот запрос ГАРАНТИРОВАНО вернет автоинкрементный ID вставленный в предыдущей строке, т.к. функция SELECT LAST_INSERT_ID() работает в рамках ОДНОГО КЛИЕНТА.
И тогда никаких дополнительных полей вводить не потребуется.

Для подрбобного пояснения приведу пример:
Для работы с базой я использую EMS MySQL менеджер. Так вот запускаем два экземпляра менеджера. В первом добавляем строку в любую таблицу с автоинкрементным полем. Тут же из этого клиента справшиваем SELECT LAST_INSERT_ID(). К примеру он возвращает 1.
И выполняем SELECT LAST_INSERT_ID() во втором клиенте - он вернет 0, потому что из этого второго клиента никаких записей еще добавлено не было.
Надеюсь помог:)


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
34326



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |