Показать полную графическую версию : MySQL - auto_increment в id.
LEXX2002
10-02-2005, 13:41
В таблице 50 записей
id smallint(6) auto_increment
С 45 – 50 записи со временем были удалены. По идеи когда создается новая запись новый id должен быть 45, однако он ставит 51…
Где это храниться и как сбросить.
PS что такой форум стал тяжелый, по 300 кб одна страница :(, в Москве то траффик практически даром, но на куличках Мб довольно дорогой.
Вот так (http://dev.mysql.com/doc/mysql/en/example-auto-increment.html) работает auto_increment.
По идее должно быть как раз 51, а не 45. auto_increment - это не порядковый номер записи, а счетчик, который генерит очередное число для каждой операции вставки, обеспечивая тем самым уникальность поля. Твою задачу, как мне кажется, возможно решить только испольуя внешнюю функцию для генерирования порядкового номера записи. правда, не совсем понятно, зачем всё это нужно...
Vlad Drakula
10-02-2005, 14:29
LEXX2002
1) все как сказал Oaxa
2) работа ведется... в ближайшее время будут результаты!
LEXX2002
10-02-2005, 14:44
Писать функцию не есть хорошо :(.
Это надо читать все ID, и если есть промежуток в числовом ряде n! то пихать туда.
А нужно в принципе для красоты, а то ID меню идёт 1,2,3, и сразу 55.
Понятно, что auto_increment не будет искать свободное число в ряду, и пихнёт сразу последнее, хотя если ряд состоит 1,2,…45 и удаленные 46,47,48,49,50, то откуда он видит стоку 50, если её удалили.
Мануал не дал ответа, не очень владеем анг.
Vlad Drakula
10-02-2005, 14:50
LEXX2002
в общем все так как есть... а если ты поработаешь по больше создавая и проектирую базы данных, то поймешь что такая организация действительно правильная и удобная для постраения баз данных!
Писать функцию не есть хорошо
Видится мне, что писать функцию, в твоем случае, не есть смысл. Хранить избыточные данные в базе исключительно для красоты? IMHO, Баловство это всё. Здесь без функции не обойтись. А теперь подумай, нужна ли тебе функция, создающая дополнительную нагрузку на сервер, и не выполняя никаких полезных действий, окромя обеспечения "красивости"? Хотя, если записей в таблице порядка 50, то вероятно это не очень критично. В Oracle, например, все решается намного проще, но всё равно, без дополнительной процедуры (внешней, или внутренней) не обойтись.
LEXX2002
При delete from table записи физически не удаляются, только помечаются как удаленные (чтоб не грузить сервер и диски сервера по перезаписи больших объемов данных, попробуй использовать optimize table, это очистит удаленные записи и возможно сбросит счетчик записей, но я не уверен про записи... вообщем пробуй
archy
Это не сбросит счетчик auto_increment , 100%. ты можешь установить этот счетчик в нужное значение, исполбзуя конструкцию типа:
ALTER TABLE tbl_name AUTO_INCREMENT = value;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.