Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MySQL: auto_increment

253
23 апреля 2006 года
Proger_XP
1.5K / / 07.08.2004
Юзаю MySQL 3.23 и MySQL 4.xx
В обычном случае, когда поле задается как auto_increment primary key, оно нормально автогенерируется, пока из таблицы не удалить запись
После этого поле продолжает автогенерится, но не заполняет тот ID, который был у удаленной записи
Таким образом, образуются дыры
Можно ли как-нибудь это предотвратить?
В мане это сводится к удалению всех записей, и заношения их через ALTER, но ресурсы, конечно очень пострадают ;)
253
23 апреля 2006 года
Proger_XP
1.5K / / 07.08.2004
Нашел, что если сделать ALTER TABLE tablename auto_increment = 1, то оно сбросится
Это, наверное, и буду юзать
385
24 апреля 2006 года
SomewherSomehow
477 / / 25.07.2004
Цитата:
Originally posted by Proger_XP
Юзаю MySQL 3.23 и MySQL 4.xx
В обычном случае, когда поле задается как auto_increment primary key, оно нормально автогенерируется, пока из таблицы не удалить запись
После этого поле продолжает автогенерится, но не заполняет тот ID, который был у удаленной записи
Таким образом, образуются дыры
Можно ли как-нибудь это предотвратить?
В мане это сводится к удалению всех записей, и заношения их через ALTER, но ресурсы, конечно очень пострадают ;)



А чем тебя беспокоят "дыры" которые образуются после удаления? Это совершенно нормально, на то это и ИД чтобы быть уникальным. А если ты будешь на каждую операцию удаления делать alter table - мне кажется сервер просто умрет. Что будешь делать если будет много записей? много пользователей обращающихся одновременно за данными? если этот ид будет foreign key в другой таблице? нескольких таблицах? Вообщем намучаешься ты с этим. Решай сам, но я бы не советовал такой подход.

253
25 апреля 2006 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
Originally posted by SomewherSomehow
А чем тебя беспокоят "дыры" которые образуются после удаления? Это совершенно нормально, на то это и ИД чтобы быть уникальным. А если ты будешь на каждую операцию удаления делать alter table - мне кажется сервер просто умрет. Что будешь делать если будет много записей? много пользователей обращающихся одновременно за данными? если этот ид будет foreign key в другой таблице? нескольких таблицах? Вообщем намучаешься ты с этим. Решай сам, но я бы не советовал такой подход


Я разве говорил, что мне понравился такой метод? ))
В общем-то, уже решил решил проблему, но сначала надо было жесткое значение ID
Вообще, если у кого-то будет подобная проблема, советую юзать метод ALTER auto_increment(), смотри выше

385
25 апреля 2006 года
SomewherSomehow
477 / / 25.07.2004
Цитата:
Originally posted by Proger_XP
Я разве говорил, что мне понравился такой метод? ))
В общем-то, уже решил решил проблему, но сначала надо было жесткое значение ID
Вообще, если у кого-то будет подобная проблема, советую юзать метод ALTER auto_increment(), смотри выше



И все равно это ужас. Или может быть я чего-то не понимаю...
Вот например, скажите мне пожалуйста что произойдет в такой ситуации.
Пусть есть две таблицы:

-TableFirst-
TableFirstID (PK,identity)
NameFirst

-TableSecond-
TableSecondID (PK,identity)
TableFirstID (FK_TableFirst_TableFirstID)
NameSecond

пусть в первой таблице такие записи:
1 - namefirst1
2 - namefirst2
3 - namefirst3

во второй таблице:
1 - 1 - namesecond1
2 - 2 - namesecond2
3 - 3 - namesecond3

теперь удаляем из первой таблицы вторую строку (чтобы не ругалось на констрэйнт - удаляем сначала из второй таблицы все записи с ИД TableFirstID = 2)
получается
в первой таблице
1 - namefirst1
3 - namefirst3

во второй
1 - 1 - namesecond1
3 - 3 - namesecond3

теперь пытаемся
воостановить порялок идентити в первой таблице, получается
1 - namefirst1
2 - namefirst3

а во второй остается
1 - 1 - namesecond1
3 - 3 - namesecond3

в общем бред.

Может я что не так понял? Объясните мне такие извращения...

253
27 апреля 2006 года
Proger_XP
1.5K / / 07.08.2004
Нет, тут другое
ALTER сбрасывает счетчик новых генерируемых ID, а не изменяет старые
Мне это нужно было в отладке, потому что если ошибся в запросе и не то вставил, потом приходилось очищать все таблицы, т.к мне нужны были фиксированные ID с нормальной связью
15
27 апреля 2006 года
shaelf
2.7K / / 04.05.2005
Цитата:
Originally posted by Proger_XP
Нет, тут другое
ALTER сбрасывает счетчик новых генерируемых ID, а не изменяет старые
Мне это нужно было в отладке, потому что если ошибся в запросе и не то вставил, потом приходилось очищать все таблицы, т.к мне нужны были фиксированные ID с нормальной связью


В тему ещё для чего это нужно (но я использовал другой способ). Есть прайс, который динамически обновляется и обновляется он полностью (по другому нельзя, т.к. это делается из файла). Обновляется он на 4000-4500 позиций 3 раза в неделю. Теперь давайте дружно представим к чему это приведёт через год (~4300*3*52).

253
27 апреля 2006 года
Proger_XP
1.5K / / 07.08.2004
Цитата:
Originally posted by shaelf
Но я использовал другой способ


Какой?

15
27 апреля 2006 года
shaelf
2.7K / / 04.05.2005
Цитата:
Originally posted by Proger_XP
Какой?


Я удалял и заново создовал таблицу:). Просто мне нужен был полный апдейт таблицы. Делал я это через DROP т.к. DELETE не сбрасывает значение auto_increment.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог