[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как начинать идексацию записей в таблице с единицы
skolozhabskiy
добрый день.

1. создана база данных и в ней таблица.
2. в таблице задано поле id
`id` INT(11) NOT NULL AUTO_INCREMENT


вопрос: почему при очищении таблицы и последующей записи в нее новых данных id начинается не с единицы, а с произвольного значения, например 10, 32 или 61. как задать, чтобы id после очищения заполненной таблицы, например десятью записями, начинала новое заполнение с индексом равном единице и так далее. Способ установить значение, например к 0 (ноль) в это поле в phpMyAdmin версия 3.4.0.0 не проходит, пишет ошибка запроса или что-то в этом роде.

как быть?

спасибо




Спустя 7 минут, 50 секунд (13.05.2011 - 13:41) inpost написал(а):
skolozhabskiy
Последняя запись была id=100, значит новая запись = id=101, это называется целостность БД.
В 99% случаев я уверен, что тебе не надо вставлять на id=1 твою запись, ты не там ищешь проблему.
Опиши ситуацию, которая тебя смущает, тогда получишь ответ, как правильно.

Спустя 4 минуты, 51 секунда (13.05.2011 - 13:46) skolozhabskiy написал(а):
та к в этом и есть вопрос, как сбросить индекс во вновь заполняемой таблице после ее полного очищения? а если, например, я очищаю таблицу после миллиона записей, новые записи будут начинаться с 1 000 001 - это же мне кажется абсурд!

ведь есть же какое-то решение?

спасибо

Спустя 2 минуты (13.05.2011 - 13:48) waldicom написал(а):
Цитата (skolozhabskiy @ 13.05.2011 - 11:46)
та к в этом и есть вопрос, как сбросить индекс во вновь заполняемой таблице после ее полного очищения?

Делать не
delete from `table`

а
truncate table `table`


Также можно установить инициальное значение autoincrement, но это нужно редко

Спустя 1 минута, 40 секунд (13.05.2011 - 13:49) skolozhabskiy написал(а):
да, как частное TRUNCATE TABLE решает проблему, если удалять все записи сразу, а если постепенная очистка таблицы с помощью DELETE по строкам?

спасибо

Спустя 1 минута, 21 секунда (13.05.2011 - 13:51) waldicom написал(а):
Цитата (skolozhabskiy @ 13.05.2011 - 11:49)
да, как частное TRUNCATE TABLE решает проблему, если удалять все записи сразу, а если постепенная очистка таблицы с помощью DELETE по строкам?

А если постепенная очистка, то трогать значение первичного ключа, а именно он в большинстве случаев имеет auto increment, не рекомендуется

Спустя 13 минут, 29 секунд (13.05.2011 - 14:04) T1grOK написал(а):

ALTER TABLE table AUTO_INCREMENT = 1

Спустя 20 минут, 11 секунд (13.05.2011 - 14:24) skolozhabskiy написал(а):
это
ALTER TABLE table AUTO_INCREMENT = 1
как увязать с php запросом:
mysql_query


если можно небольшой пример.

српасибо

Спустя 10 минут, 29 секунд (13.05.2011 - 14:35) skolozhabskiy написал(а):
допустим создана таблица:

$sql = "CREATE TABLE IF NOT EXISTS `test` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
и так далее
PRIMARY KEY (id),
UNIQUE id (id)
)"
;
mysql_query($sql);


куда вставлять эти строки, например:

ALTER TABLE `test` DROP `id`; 
ALTER TABLE `test` AUTO_INCREMENT = 1;
ALTER TABLE `test` ADD `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST ;


вы имели ввиду так?

спасибо

Спустя 9 минут, 8 секунд (13.05.2011 - 14:44) T1grOK написал(а):
Очистил таблицу. изменил аутоинкремент.

delete from `table`

потом

ALTER TABLE table AUTO_INCREMENT = 1

Спустя 5 минут, 40 секунд (13.05.2011 - 14:50) waldicom написал(а):
Цитата (T1grOK @ 13.05.2011 - 12:44)
Очистил таблицу. изменил аутоинкремент.

delete from `table`

потом

ALTER TABLE table AUTO_INCREMENT = 1

А почему вместо этих двух действий не сделать одно?

Спустя 1 минута, 42 секунды (13.05.2011 - 14:51) waldicom написал(а):
Цитата (skolozhabskiy @ 13.05.2011 - 12:35)
куда вставлять эти строки, например:

ALTER TABLE `test` DROP `id`;
ALTER TABLE `test` AUTO_INCREMENT = 1;
ALTER TABLE `test` ADD `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST ;

Никуда их не надо вставлять. Какова цель данного действия? Зачем трогаит первичный ключ?

Спустя 14 минут, 44 секунды (13.05.2011 - 15:06) skolozhabskiy написал(а):
речь идет о том, чтобы если таблица полностью очищена начинать идексацию с единицы. что в этом плохого? одни говорят что это плохо, другие что можно. кто прав? кто-то может объяснить. задача простая без второго дна! просто установить id во вновь набиваемую таблицу с 1. что здесь плохого для sql? я уже приводил пример если дело дойдет до миллиона записей в послеледовательно обновляемых таблицах с периодическим очищением и заполнением вновь, sql будет оптимально обрабатывать индексы начинающиеся с миллион первого или может проще для sql начинать обработку с единицы и так далее?

спасибо за ответ.

Спустя 2 минуты, 47 секунд (13.05.2011 - 15:09) waldicom написал(а):
Еще раз: если таблица очищается полностью, то TRUNCATE
Если в таблице время от времени удаляются строки (что совершенно нормально), то не надо обновлять auto increment

Цитата (skolozhabskiy @ 13.05.2011 - 13:06)
sql будет оптимально обрабатывать индексы начинающиеся с миллион первого или может проще для sql начинать обработку с единицы и так далее?

Для MySQL это совершенно все равно

Спустя 1 час, 43 минуты, 38 секунд (13.05.2011 - 16:53) skolozhabskiy написал(а):
спасибо, понятно
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.