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 твою запись, ты не там ищешь проблему.
Опиши ситуацию, которая тебя смущает, тогда получишь ответ, как правильно.
Последняя запись была 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) |
Очистил таблицу. изменил аутоинкремент.
потом
|
А почему вместо этих двух действий не сделать одно?
Спустя 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
Если в таблице время от времени удаляются строки (что совершенно нормально), то не надо обновлять auto increment
Цитата (skolozhabskiy @ 13.05.2011 - 13:06) |
sql будет оптимально обрабатывать индексы начинающиеся с миллион первого или может проще для sql начинать обработку с единицы и так далее? |
Для MySQL это совершенно все равно
Спустя 1 час, 43 минуты, 38 секунд (13.05.2011 - 16:53) skolozhabskiy написал(а):
спасибо, понятно