Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Следующей значение ключа(auto increment)? / 25 сообщений из 30, страница 1 из 2
01.06.2005, 20:31
    #33095989
S. Fedorenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
Подскажите пожалуйста:
Я выполняю запрос на добавление в таблицу. При этом ключевое поле ID у меня присваивается автоматически.
Вопрос: как узнать значение, которое будет присвоено при выполнении этого запроса.

Спасибо.
...
Рейтинг: 0 / 0
01.06.2005, 20:49
    #33096000
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
узнать, какое будет - сложно. Можно узнать, какое было после вставки.
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
01.06.2005, 20:54
    #33096004
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
S. FedorenkoВопрос: как узнать значение, которое будет присвоено при выполнении этого запроса.Будет - вам совершенно не нужно. Вам нужно "было"
mysql_insert_id
LAST_INSERT_ID
...
Рейтинг: 0 / 0
01.06.2005, 22:44
    #33096107
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
Код: plaintext
1.
SHOW TABLE STATUS [FROM db_name] [LIKE wild]
Код: plaintext
1.
2.
3.
...
Auto_increment | Следующее значение автоинкремента.  
...
...
Рейтинг: 0 / 0
01.06.2005, 22:48
    #33096111
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
2 S. Fedorenko
Посмотрев в ваш профиль, уточняю, что это фича MySQL :)
Поэтому если вы используте другую СУБД, то смотрите мануал.
...
Рейтинг: 0 / 0
01.06.2005, 23:14
    #33096140
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
Berkut
Код: plaintext
1.
SHOW TABLE STATUS [FROM db_name] [LIKE wild]
Код: plaintext
1.
2.
3.
...
Auto_increment | Следующее значение автоинкремента.  
...
Зачем даваать ответ, который лишён смысла?
Может объясните, ЗАЧЕМ ЭТО МОЖЕТ БЫТЬ НУЖНО?
...
Рейтинг: 0 / 0
02.06.2005, 09:54
    #33096487
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
*Зачем даваать ответ, который лишён смысла?
Может объясните, ЗАЧЕМ ЭТО МОЖЕТ БЫТЬ НУЖНО?
Думаю, что все-таки не лишен.
Если требуется узнать следующее значение автоинкремента, то это можно сделать, выполнив команду SHOW TABLE STATUS; ( тынц ).

Сам я никогда не использовал данную фичу, т.к. надобности не было, но если кому-то это надо - значит надо.
...
Рейтинг: 0 / 0
02.06.2005, 09:58
    #33096494
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
BerkutЕсли требуется узнать следующее значение автоинкремента, то это можно сделать, выполнив команду SHOW TABLE STATUS; ( тынц ).Я повторяю свой вопрос ЗАЧЕМ ЭТО МОЖЕТ БЫТЬ НУЖНО?Сам я никогда не использовал данную фичу, т.к. надобности не было, но если кому-то это надо - значит надо.Позволю себе перефразировать: сам я никогда не прыгал с 100-го этажа на асфальт, но если вам нужно - значит нужно.
...
Рейтинг: 0 / 0
02.06.2005, 10:18
    #33096548
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
*Я повторяю свой вопрос ЗАЧЕМ ЭТО МОЖЕТ БЫТЬ НУЖНО
Не знаю :)
*Позволю себе перефразировать: сам я никогда не прыгал с 100-го этажа на асфальт, но если вам нужно - значит нужно.
Без комментариев...
...
Рейтинг: 0 / 0
02.06.2005, 10:47
    #33096639
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
>Я повторяю свой вопрос ЗАЧЕМ ЭТО МОЖЕТ БЫТЬ НУЖНО?
Например.
Выполняем транзакцию, которая вставляет новую строку с полем автоинкермента в таблицу1, берет LAST_INSERT_ID, вставляет его в таблицу2, которая генерит свой ID. А нужно узнать, что вставлено в таблицу1. mysql_insert_id - возвращает последний сгенерированный auto_increment.
Тогда вариант, предложенный Berkut даже очень уместен.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
02.06.2005, 10:53
    #33096665
Dik76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
4m@t!c

>> Я повторяю свой вопрос ЗАЧЕМ ЭТО МОЖЕТ БЫТЬ НУЖНО?
mc> Например.
mc> Выполняем транзакцию, которая вставляет новую строку с полем
mc> автоинкермента в таблицу1, берет LAST_INSERT_ID, вставляет его в
mc> таблицу2, которая генерит свой ID. А нужно узнать , что вставлено в
mc> таблицу1. mysql_insert_id - возвращает последний сгенерированный
mc> auto_increment. Тогда вариант, предложенный Berkut даже очень уместен.
Зачем это надо узнать?

--
Dik76

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
02.06.2005, 10:55
    #33096673
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
В реальных условиях это может полезно еще когда в другой сессии происходит добавление новых строк, т.к. в одной сессии
mysql_insert_id()+1 - это уже ни есть значение следующего автоинкремента.
...
Рейтинг: 0 / 0
02.06.2005, 11:00
    #33096685
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
BerkutВ реальных условиях это может полезно еще когда в другой сессии происходит добавление новых строк, т.к. в одной сессии
mysql_insert_id()+1 - это уже ни есть значение следующего автоинкремента.А зачем это знать?Выполняем транзакцию, которая вставляет новую строку с полем автоинкермента в таблицу1, берет LAST_INSERT_ID, вставляет его в таблицу2, которая генерит свой ID. А нужно узнать, что вставлено в таблицу1. mysql_insert_id - возвращает последний сгенерированный auto_increment.Что вам мешает запомнить то, что получилось на первом этапе (вставка в первую таблицу), и использовать это на этапах, следующих после второго?

Дайте реальную задачу, где это нужно. Не высосанную из пальца, а реальную. Где без этого ну никак. И это было бы правильным решением.
...
Рейтинг: 0 / 0
02.06.2005, 11:10
    #33096715
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
2 *
Если есть связь между таблицами по какому-нить ИД и подчиненная таблица использует этот самый ИД. Дык может потребоваться знание последнего вставленного ИД в первую таблицу.
Повторюсь, дело в том, что это имеет смысл если происходит одновременная вставка в многопользовательской системе.

P.S. Думаю, что когда у вас возникнет необходимость это сделать, вы не будете спрашивать "а зачем?". Просто сделаете и все. :)
...
Рейтинг: 0 / 0
02.06.2005, 11:15
    #33096726
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
Вообще мне очень жаль, что я просто теряю свое время...

Если вы не знаете "зачем" - значит вам просто это не надо ИМХО.

Конкретный пример - наполнение "таблиц-справочников".

И в заключении... думаю не просто так разработчики СУБД (не только в MySQL) предусмотрели такую фичу, чтобы был интерфейс для получения "следующего автоинкремента".
...
Рейтинг: 0 / 0
02.06.2005, 11:18
    #33096733
Dik76
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
Berkut
Повторюсь, дело в том, что это имеет
B> смысл если происходит одновременная вставка в многопользовательской
B> системе.
Тем более не понятно. Откуда вы будете уверены, что последний id в связанной таблице будет тем, что вам нужен? Его легко
может вставить другой пользователь. Что то тут в консерватории не верно.

--
Dik76

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
02.06.2005, 11:27
    #33096760
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
BerkutЕсли вы не знаете "зачем" - значит вам просто это не надо ИМХО.Так приведите наконец пример, ГДЕ ЭТО НАДО.Конкретный пример - наполнение "таблиц-справочников".Где всё человечество прекрасно обходится помощью LAST_INSERT_ID.И в заключении... думаю не просто так разработчики СУБД (не только в MySQL) предусмотрели такую фичу, чтобы был интерфейс для получения "следующего автоинкремента".Оно предназначено не для этого. Просто средство диагностики. А в противовес вашему утверждению можно сказать - если бы это кому нибудь было бы нужно, существовала бы команда типа NEXT_INSERT_ID
...
Рейтинг: 0 / 0
02.06.2005, 11:30
    #33096772
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
Dik76
Berkut
Повторюсь, дело в том, что это имеет
B> смысл если происходит одновременная вставка в многопользовательской
B> системе.
Тем более не понятно. Откуда вы будете уверены, что последний id в связанной таблице будет тем, что вам нужен? Его легко
может вставить другой пользователь. Что то тут в консерватории не верно.

--
Dik76

Posted via ActualForum NNTP Server 1.2
Вот про это я и говорю! Читайте внимательнее: "в одной сессии
mysql_insert_id()+1 - это уже ни есть значение следующего автоинкремента.".

Это уже к вопросу "блокировок по чтению".
...
Рейтинг: 0 / 0
02.06.2005, 11:45
    #33096817
4m@t!c
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
ИМХО, флейм...
Предложенные - варианты - это работающие способы получения последнего ID.
Самый верный - это вариант, предложенный господином *. Вариант Berkut тоже имеет право на существование.
[offtop]
Как-то читая тред по железу я прочел тред насчет того, что Резак прожигал диски, только когда играл ВинАМП - посмеялся с этого всего...
Но тут был случай. Был у камрада в гостях. У него оказалась ценная для моей фирмы информация. Слить я мог только на болванку. Но его резак начисто отказывался жечь. Все честно эмулировал, а жечь отказывался... Я вспомнил тот топик и включил винАМП... и резак честно нарезал болванку...
Итог: "Ты суслика видишь? А он есть..." (С) ДМБ.
[offtop]
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
02.06.2005, 11:45
    #33096820
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
*Так приведите наконец пример, ГДЕ ЭТО НАДО.
Постановка задачи - это хорошая вещь и умение. :)
Если позволите, то позже (сейчас времени нету).

P.S. Если вам так интересно, то спросите у автора топига. Мне тоже будет интересно.
...
Рейтинг: 0 / 0
02.06.2005, 12:20
    #33096960
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
4m@t!cВариант Berkut тоже имеет право на существование.Пример в студию.
...
Рейтинг: 0 / 0
02.06.2005, 12:22
    #33096965
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
BerkutЕсли вам так интересно, то спросите у автора топига. Мне тоже будет интересно.Он отмалчивается. Собственно, я и пытался, чтобы автор наконец написал, зачем ему это нужно, потому что как только он это сделает - ему покажут, как это нужно делать и с лёгкостью решается при помощи LAST_INSERT_ID.
Боюсь, доводы в пользу необходимости существования NEXT_INSERT_ID не выдержат никакой критики.
...
Рейтинг: 0 / 0
02.06.2005, 13:58
    #33097297
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
Вот реальный пример, который позволяет определить
значение следующего автоинкремента. Не совсем то,
что я хотел привести, но принцип будет понятен.

Код: plaintext
Создаем простую табличку (все выполняется в одной сессии)
Код: plaintext
1.
2.
3.
4.
create table t1 (
 id int not null auto_increment,
 info varchar( 10 ),
 primary key(id));

Код: plaintext
1.
2.
3.
4.
5.
6.
insert into t1 (info) values ('this is first row');

select last_insert_id();

 1 


Код: plaintext
Теперь делаем многострочную вставку
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
insert into t1 (info)
 select 'this is second row' union all
 select 'this is third row';

-- после вставки
select * from t1

+----+------------+
| id | info       |
+----+------------+
|   3  | this is th |
|   2  | this is se |
|   1  | this is fi |
+----+------------+

select last_insert_id()

 2 

И это верно, т.к.

Для многострочной вставки, LAST_INSERT_ID()/mysql_insert_id() на самом деле
вернут AUTO_INCREMENT значение для первой вставленной записи. Это сделано для
того, чтобы многострочные вставки можно было повторить на других серверах.


Код: plaintext
В то время как значение следующего автоинкремента, выводимое командой SHOW TABLE STATUS
Код: plaintext
1.
2.
3.
4.
5.
6.
show table status;
+---------+--------+---------+------------+--------+----------------+---------------------+---------------------+
| Name    | Engine | Version | Row_format | Rows   | Auto_increment | Create_time         | Update_time         |
+---------+--------+---------+------------+--------+----------------+---------------------+---------------------+
| t1      | MyISAM |        9  | Dynamic    |       3  |               4  |  2005 - 06 - 02   13 : 12 : 59  |  2005 - 06 - 02   13 : 16 : 59  |
+---------+--------+---------+------------+--------+----------------+---------------------+---------------------+

В этом и есть пожалуй главное отличие Last_insert_id() от поля Auto_increment в SHOW TABLE STATUS;

Поэтому в том случае, когда происходят многочисленные вставки и существует связь между таблицами по автоинкрементному полю, то такой вариант вполне уместен ИМХО.

P.S. Предложите решение лучше :)

Код: plaintext
1.
2.
3.
select version();

 4 . 1 . 8 -max
...
Рейтинг: 0 / 0
02.06.2005, 14:13
    #33097362
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
*
А в противовес вашему утверждению можно сказать - если бы это кому нибудь было бы нужно, существовала бы команда типа NEXT_INSERT_ID

Кстати *, например в Oracle такая фича уже есть :)
Код: plaintext
1.
select sequence_name.next from dual;
P.S. Может быть в различных СУБД диапозон решаемых задач отличается? :)
...
Рейтинг: 0 / 0
02.06.2005, 14:51
    #33097520
Kioto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Следующей значение ключа(auto increment)?
по-мойму гест просто самоуверенный мудаг и флеймер канифолящий всем мозги. ну можешь ты обойтись без этой фичи и обходись дальше - СЧАСТЬЯ ТЕБЕ. а РЕАЛЬНЫЙ ПРИМЕР можешь засунуть себе туда, где не светит солнце. когда найдёшь. дятел блин.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Следующей значение ключа(auto increment)? / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]