|
|
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
Собственно subj или Как получить последнее введенное значение поля с автоинкрементом. Функция LAST_INSERT_ID() возвращает 0 !!!! Тогда как последняя запись имеет номер 25390.... --- ... и все мы можем! Козьма Прутков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 18:39 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
мот и не очень грамотно, но моно max() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 18:43 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
demon11мот и не очень грамотно, но моно max() Не можно..... Потому что AUTO_INCREMENT генерит число, не из соображений "создать новое максимальное число", а из соображений "создать уникальное число". 2 Игорь Л. Покажи код, который ты выполняешь. что у тебя появляется ноль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 19:01 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
4m@t!cПокажи код, который ты выполняешь. что у тебя появляется ноль? Код: plaintext 1. Да, забыл сказать: WinXP+VFP8,0+ODBC+MySQL или WinXP+MySQLFront или WinXP+MySQLAdmin результат - 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 19:44 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
Если мы обратимся в ману, то там написано mysql.com Note that mysql_insert_id() returns the value stored into an AUTO_INCREMENT column, whether that value is automatically generated by storing NULL or 0 or is an explicit value. LAST_INSERT_ID() returns automatically generated AUTO_INCREMENT values. If you store an explicit value other than NULL or 0, it does not affect the value returned by LAST_INSERT_ID(). Что в переводе с буржуйского приблизительно означает - LAST_INSERT_ID() возвращает автоматически сгенерированное значение, и если было явное присвоение значения отличное от NULL или 0, то смысла в функции нет. Другими словами, если ты АВТОМАТИЧЕСКИ генеришь ID, то ты его получишь из функции LAST_INSERT_ID(), а если ты его задаешь явно, то болт с левой резьбой, что ты получишь от LAST_INSERT_ID(). В принципе, оно и правильно. Если ты явно присваиваешь значение, значит ты его уже знаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 20:25 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
4m@t!cВ принципе, оно и правильно. Если ты явно присваиваешь значение, значит ты его уже знаешь. Да не... Значение присваевается другим полям, а AUTO_INCREMENT - это поле id_lst. Оно не изменяется с программы. И мне нужно получить его значение... В принципе, мне желательно знать будущее значение внесенной записи, но полученное значение после добавления записи тоже сгодится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 20:34 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
Игорь Л. В принципе, мне желательно знать будущее значение внесенной записи, но полученное значение после добавления записи тоже сгодится Ты не можешб получить СЛЕДУЮЩЕЕ значение, которое будет сгенерировано. Ты можешь получить ТОЛЬКО последнее УЖЕ сгенерированное. В процессе, когда добавляется новая строка, значение auto_increment создается и добавляется в новую строку после того, как MySQL просмотрит уже имеющиеся значения в существующих записях. Auto_increment не просматривает столбец после того, как вставит новую строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 20:51 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
4m@t!cТы не можешб получить СЛЕДУЮЩЕЕ значение, которое будет сгенерировано. Ты можешь получить ТОЛЬКО последнее УЖЕ сгенерированное. Очень хорошо! Как его получить? LAST_INSERT_ID() всегда возвращает 0!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 20:57 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
Игорь Л. Очень хорошо! Как его получить? LAST_INSERT_ID() всегда возвращает 0!!![/quot] Я тебе уже ответил..... Подсказка автор INSERT INTO lst set field1='...' ... можно спросить? Этот запрос быстро работает???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 21:10 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
Но зачем тогда поле с автоинкременом? В своей локальной БД (VisualFoxPro) я могу узнать следующее значение просто. В Мускуле есть нужная функция LAST_INSERT_ID(). Вопрос в том, почему она не работает??? :( --- ... и все мы можем! Козьма Прутков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 21:19 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
Игорь Л.Но зачем тогда поле с автоинкременом? В своей локальной БД (VisualFoxPro) я могу узнать следующее значение просто. В Мускуле есть нужная функция LAST_INSERT_ID(). Вопрос в том, почему она не работает??? :( --- ... и все мы можем! Козьма Прутков Для тех, кто в танке, диктую большими буквами. ПРОЧТИ СИНТАКСИС MYSQL ДЛЯ КОНСТРУКЦИИ INSERT вот, когда ты прочтешь про синтаксис именно в Мускуле, а не в VisualFoxPro. А потом правильно напишешь запрос с INSERT и у тебя не получится получить занчение из функции LAST_INSERT_ID().. Тогда и будешь спрашивать "почему она не работает?" Подробная инструкция, как правильно написать конструкцию c INSERT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 21:30 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
4m@t!cДля тех, кто в танке, диктую большими буквами. ПРОЧТИ СИНТАКСИС MYSQL ДЛЯ КОНСТРУКЦИИ INSERT ОК! См. ниже :) 6.4.3 Синтаксис оператора INSERT INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expression, ... ] или INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... или INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name SET col_name=(expression | DEFAULT), ... [ ON DUPLICATE KEY UPDATE col_name=expression, ... ] Оператор INSERT вставляет новые строки в существующую таблицу. Форма данной команды INSERT ... VALUES вставляет строки в соответствии с точно указанными в команде значениями. Форма INSERT ... SELECT вставляет строки, выбранные из другой таблицы или таблиц. Форма INSERT ... VALUES со списком из нескольких значений поддерживается в версии MySQL 3.22.5 и более поздних. Синтаксис выражения col_name=expression поддерживается в версии MySQL 3.22.10 и более поздних. tbl_name задает таблицу, в которую должны быть внесены строки. Столбцы, для которых заданы величины в команде, указываются в списке имен столбцов или в части SET: Если не указан список столбцов для INSERT ... VALUES или INSERT ... SELECT, то величины для всех столбцов должны быть определены в списке VALUES() или в результате работы SELECT. Если порядок столбцов в таблице неизвестен, для его получения можно использовать DESCRIBE tbl_name. Любой столбец, для которого явно не указано значение, будет установлен в свое значение по умолчанию. Например, если в заданном списке столбцов не указаны все столбцы в данной таблице, то не упомянутые столбцы устанавливаются в свои значения по умолчанию. Установка значений по умолчанию описывается в разделе section 6.5.3 Синтаксис оператора CREATE TABLE. Вы также можете использовать ключевое слово DEFAULT для того, чтобы установить столбец в его значение по умолчанию (новшество в MySQL 4.0.3). Это облегчает написание INSERT, присвающим значения всем, за исключением одного-двух, столбцам, т.к. такой ситнаксис позволяет вам обойтись без указания списка столбцов, которые оператор INSERT должен обновить. В MySQL всегда предусмотрено значение по умолчанию для каждого поля. Это требование ``навязано'' MySQL, чтобы обеспечить возможность работы как с таблицами, поддерживающими транзакции, так и с таблицами, не поддерживающими их. Наша точка зрения (разработчиков) состоит в том, что проверка содержимого полей должна производиться приложением, а не сервером баз данных. Выражение expression может относится к любому столбцу, который ранее был внесен в список значений. Например, можно указать следующее: mysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2); Но нельзя указать: mysql> INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15); Если указывается ключевое слово LOW_PRIORITY, то выполнение данной команды INSERT будет задержано до тех пор, пока другие клиенты не завершат чтение этой таблицы. В этом случае данный клиент должен ожидать, пока данная команда вставки не будет завершена, что в случае интенсивного использования таблицы может потребовать значительного времени. В противоположность этому команда INSERT DELAYED позволяет данному клиенту продолжать операцию сразу же. See section 6.4.4 Синтаксис оператора INSERT DELAYED. Следует отметить, что указатель LOW_PRIORITY обычно не используется с таблицами MyISAM, поскольку при его указании становятся невозможными параллельные вставки. See section 7.1 Таблицы MyISAM. Если в команде INSERT со строками, имеющими много значений, указывается ключевое слово IGNORE, то все строки, имеющие дублирующиеся ключи PRIMARY или UNIQUE в этой таблице, будут проигнорированы и не будут внесены. Если не указывать IGNORE, то данная операция вставки прекращается при обнаружении строки, имеющей дублирующееся значение существующего ключа. Количество строк, внесенных в данную таблицу, можно определить при помощи функции C API mysql_info(). Если вы указываете ON DUPLICATE KEY UPDATE (новшество в MySQL 4.1.0), и производится вставка строки, которая вызывает ошибку дублирующегося первичного (PRIMARY) или уникального (UNIQUE) ключа, то вполняется UPDATE старой строки. Например: mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) --> ON DUPLICATE KEY UPDATE c=c+1; Если a определяется как UNIQUE и уже содержит 1, то тогда вышеуказанная команда будет аналогична следующей: mysql> UPDATE table SET c=c+1 WHERE a=1; Внимание: если столбец b также является уникальным ключем, то UPDATE переписывается как: mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1; и если несколько записей соответствуют a=1 OR b=2 только одна запись будет обновлена! В общем случае, следует избегать использования ON DUPLICATE KEY на таблицах со множеством уникальных (UNIQUE) ключей. Когда используется ON DUPLICATE KEY UPDATE, опция DELAYED будет проигнорирована. Если MySQL был сконфигурирован с использованием опции DONT_USE_DEFAULT_FIELDS, то команда INSERT будет генерировать ошибку, если явно не указать величины для всех столбцов, которые требуют значений не-NULL. See section 2.3.3 Типичные опции configure. С помощью функции mysql_insert_id можно найти величину, использованную для столбца AUTO_INCREMENT. See section 8.4.3.31 mysql_insert_id(). Если задается команда INSERT ... SELECT или INSERT ... VALUES со списками из нескольких значений, то для получения информации о данном запросе можно использовать функцию C API mysql_info(). Формат этой информационной строки приведен ниже: Records: 100 Duplicates: 0 Warnings: 0 Duplicates показывает число строк, которые не могли быть внесены, поскольку они дублировали бы значения некоторых существующих уникальных индексов. Указатель Warnings показывает число попыток внести величину в столбец, который по какой-либо причине оказался проблематичным. Предупреждения возникают при выполнении любого из следующих условий: Внесение NULL в столбец, который был объявлен, как NOT NULL. Данный столбец устанавливается в значение, заданное по умолчанию. Установка числового столбца в значение, лежащее за пределами его допустимого диапазона. Данная величина усекается до соответствующей конечной точки этого диапазона. Занесение в числовой столбец такой величины, как '10.34 a'. Конечные данные удаляются и вносится только оставшаяся числовая часть. Если величина вовсе не имеет смысла как число, то столбец устанавливается в 0. Внесение в столбцы типа CHAR, VARCHAR, TEXT или BLOB строки, превосходящей максимальную длину столбца. Данная величина усекается до максимальной длины столбца. Внесение в столбец даты или времени строки, недопустимой для данного типа столбца. Этот столбец устанавливается в нулевую величину, соответствующую данному типу. Если ты имеешь ввиду это: С помощью функции mysql_insert_id можно найти величину, использованную для столбца AUTO_INCREMENT. See section 8.4.3.31 mysql_insert_id(). то я именно об этом и говорю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 21:59 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
Я хочу сказать вот что. Столбец, имеющий атрибут AUTO_INCREMENT, должен быть объявлен как NOT NULL и проиндексирован PRIMARY KEY/UNIQUE, положительное целое число. Кол-во таких столбцов в таблице не больше одного. Что бы получить последний ID вставка нового ID и LAST_INSERT_ID() должно выполняться в одном соединении. Работает и mysql_insert_id() и LAST_INSERT_ID(). Разницу я тебе сказал. Все, что мне удалось узнать, что бы помочь тебе это огрызок кода.... Ни описание созданной таблицы, ни нормального кода я не увидел. Если тебя устраивает вариант mysql_insert_id() и он работает - я искренне рад за тебя. А то, что ты так и не понял, почему у тебя не работают оба варианта - это уже твои проблемы. З.Ы. Смысл было цитировать половину мана? Показать что ты прочел, но ничего не понял? ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 23:18 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
4m@t!c demon11мот и не очень грамотно, но моно max() Не можно..... Потому что AUTO_INCREMENT генерит число, не из соображений "создать новое максимальное число", а из соображений "создать уникальное число". Сморя какая версия до какой он так и поступает, но новые версии генерят следующее неиспользованное, даже еси нек-е записи удалены ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 11:57 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
4m@t!cЯ хочу сказать вот что. Столбец, имеющий атрибут AUTO_INCREMENT, должен быть объявлен как NOT NULL и проиндексирован PRIMARY KEY/UNIQUE, положительное целое число. Да все это есть: create table lst (; id_lst int not null auto_increment,; id_rec varchar(10) not null,; id_par1 varchar(10) not null,; ... primary key(id_lst),... Только не могу получить значение (следующее или текущее - без разницы). Функция mysql_insert_id() вроде как в винде работать не будет, только под фр:ей, а вот LAST_INSERT_ID() вроде должна бы, но не дает... :( Может какие-нить настойки или еще что-то влияет???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 12:16 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
Сколько флейма и 0 конструктива... Получить значени проще всего Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 13:02 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
MongooseСколько флейма и 0 конструктива... Получить значени проще всего Код: plaintext Увы, нет! Через менеджер запись добавляется, но вот из программы нет - говорит, что поле есть автоинкремент! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 14:41 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
Интересное наблюдение: счетчик лежит в файле *.MYI байты 96-99. Может сделать процедурку, да и выковыривать его от туда :) --- ... и все мы можем! Козьма Прутков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 14:58 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
MongooseСколько флейма и 0 конструктива... Получить значени проще всего Код: plaintext Код: plaintext НЕ СОВЕТУЙ БРЕД , конструктивный ты наш. Тип данных у тебя TINYINT (т.е. максимальное беззнаковое 255) Значение атрибута автоинкремент стало равно 255, в процессе работы с таблицей - строки добавлялись/удалялись. А теперь вопрос: чему будет равно значение автоинкремент согласно твоей логике(алгоритму)???? 256???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 16:18 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
>Функция mysql_insert_id() вроде как в винде работать не будет, еще как будет, все нормально работает. >Может какие-нить настойки или еще что-то влияет????[/quot] нет, настройки не влияют. Как уже мы знаем, выдаваться ноль может в тех случаях, когда чвно указывается значение индекса при добавлении индекса. Второй вариант это выполнение каких-либо запросов между отработкой INSERT и вызовом функции LAST_INSERT_ID(). Теперь напиши логически законченную часть кода, в которой ты вставляешь строку, а потом вызываешь функцию. Напиши именно код.. Если это РНР - напиши код на РНР, если на другом языке - напиши на другом языке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 16:28 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
last_insert_id() такая конструкция может возвращать 0 цитирую книгу "возвращает значение функции auto_increment, которое было сгенерировано последним во время текущего сеанса работы сервера " т.е. если с момента вставки вы гасили сервер то будет 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 18:16 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
alexpogorelovlast_insert_id() такая конструкция может возвращать 0 цитирую книгу "возвращает значение функции auto_increment, которое было сгенерировано последним во время текущего сеанса работы сервера " т.е. если с момента вставки вы гасили сервер то будет 0 Могу лишь посоветовать вам выкинуть свою кингу и купить мануал по адресу http://dev.mysql.com/doc/mysql/en/index.html Цитата оттуда "The last ID that was generated is maintained in the server on a per-connection basis." Игорь Л.Интересное наблюдение: счетчик лежит в файле *.MYI байты 96-99. Может сделать процедурку, да и выковыривать его от туда :) Его можно получить по запросу для таюблиц myiasm show table status like 'table' Но так и не пойму зачем... И вообще для работы всех ваших вариантов с MAX нужно блокировать таблицы для избежания получения одинокового значения конкурирующими клиентами. Значение же авто_инкремента контролируется сервером что позволяет получить новое свободное(большее чем текущее) значение и гарантирует то что ДРУГОЙ клиент его не получит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 21:35 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
Криво, зато заработает добавляешь таймштам 14. И где он максимальный, там и id последний В этом методе использованна ключевая функция нашей вселенной, что сейчас всегда больше, чем только что. Да прибудет с вами дистрибутив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 22:20 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
SarinКриво, зато заработает добавляешь таймштам 14. И где он максимальный, там и id последний Вы когда флеймите указывайте ограничения которые накладывает ваш способ, а то ктонибудь вдруг возьмёт да воспользуется.... - когда в таблице одно такое поле - нельзя редактировать записи - в одну секунду нельзя вставлять более одно записи и вообще у id тут,со временем создания записи ,прямая связь, поэтому время не надо -- No microsoft software was used to post this message ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 22:36 |
|
||
|
Как получить следующее значение авто_инкремента
|
|||
|---|---|---|---|
|
#18+
SarinКриво, зато заработает добавляешь таймштам 14. И где он максимальный, там и id последний ... и между твоим select который выбирает максимальное значение и insert-ом какой нибудь другой пользователь успевает воткнуть пару записей. Вот всем весело то будет. Что вы придумываете, граждане? last_inswert_id() работает абсолбтно стабильно. Если он ничего не возвращает, значит в этой сессии вы еще не добавляли записей с автоинкрементальным полем. Гуевые клиенты как правило выполняют каждый запрос в своем соединении. Поэтому и last_insert_id() нулевой. Так что зайдите ка лучше в mysql.exe и попробуйте оттуда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 22:44 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=32906838&tid=1854350]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
177ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 533ms |

| 0 / 0 |
