Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Как обнулить ID, если таблица была очищена?


Автор: ukrsonic 25.1.2008, 15:26
Здравствуйте,

почистил таблицу от тестовых записей, и поле id естесна пустое.

Вставляю новые данные, INSERT INTO table VALUES ('NULL', 'value1'....) 
 
Потом, просматриваю данные, как они вставились. Смотрю в поле id а там 0025, 0026, 0027.....
хотя полагал что будет так id = 0001, 0002, 0003, ...

Странно, видимо MySQL держит в памяти последний индентификатор поля ID, т.к. начинает делать AUTO_INCREMENT не с нуля. 

Чем такое может быть вызвано? Или как сделать reset поля id?

К базе использую постоянное соединение mysql_pconnect();

Автор: bars80080 25.1.2008, 15:56
id - штука уникальная, она по-любому будет не повторяться, так и должно быть

а зачем тебе обнуление? причин не вижу

Автор: MoLeX 25.1.2008, 16:01
вроде так
Код

ALTER TABLE `таблицы` PACK_KEYS=0 CHECKSUM=0 DELAY_KEY_WRITE=0 AUTO_INCREMENT=1

Автор: SelenIT 25.1.2008, 17:17
А TRUNCATE TABLE разве автоинкремент не сбрасывает?

Автор: sTa1kEr 25.1.2008, 18:18
Цитата(SelenIT @  25.1.2008,  18:17 Найти цитируемый пост)
А TRUNCATE TABLE разве автоинкремент не сбрасывает? 

Совершенно верно, "TRUNCATE TABLE" сбрасывает автоинкремент. http://dev.mysql.com/doc/refman/4.1/en/truncate.html
Цитата

The table handler does not remember the last used AUTO_INCREMENT value, but starts counting from the beginning. This is true even for MyISAM and InnoDB, which normally do not reuse sequence values.

Более того, в отличии от DELETE, он работает моментально для таблиц MyISAM
Так же можно сбросить автоинкремент запросом
Код

ALTER TABLE `table` AUTO_INCREMENT=1;

http://dev.mysql.com/doc/refman/4.1/en/create-table.html
Цитата

For engines that support the AUTO_INCREMENT table option in CREATE TABLE statements, you can also use ALTER TABLE tbl_name  AUTO_INCREMENT = N to reset the AUTO_INCREMENT value. The value cannot be set lower than the maximum value currently in the column.


MoLeX, 
Цитата(MoLeX @  25.1.2008,  17:01 Найти цитируемый пост)
ALTER TABLE `таблицы` PACK_KEYS=0 CHECKSUM=0 DELAY_KEY_WRITE=0 AUTO_INCREMENT=1

Вытащили из какой-то CMS-ки? smile Тогда уж следовало пояснить для чего нужен каждый параметр. К примеру, с чего вы взяли, что ukrsonic необходимо хранить индексы с уменьшенным размером (PACK_KEYS=0) ? Или для отключения задержки перед обновлением ключей (DELAY_KEY_WRITE=0), нужно иметь ввиду
Цитата

Note that if you enable external locking with --external-locking, there is no protection against index corruption for tables that use delayed key writes.

К тому же не факт, что используется именно MyISAM таблица.

Добавлено @ 18:26
Перед тем как советовать тот или иной код, нужно понимать что он делает и к каким последствиям это может привести, а не надеяться на то, что раз кто-то так делает, значит так правильно. smile

Автор: MoLeX 26.1.2008, 10:03
Цитата(sTa1kEr @  25.1.2008,  18:18 Найти цитируемый пост)
Вытащили из какой-то CMS-ки

нет. для этого есть пхпмайадмин))))

Добавлено через 1 минуту и 1 секунду
Цитата(sTa1kEr @  25.1.2008,  18:18 Найти цитируемый пост)
Перед тем как советовать тот или иной код, нужно понимать что он делает и к каким последствиям это может привести, а не надеяться на то, что раз кто-то так делает, значит так правильно.

вообщето я его протестил и он сработал. так что sTa1kEr тут ты не прав.  

Автор: ukrsonic 26.1.2008, 21:59
Прошу всех извинить меня за задержку с ответом.

Я попробовал этот вариант TRUNCATE [TABLE] tbl_name и он отлично сработал.

AUTO_INCREMENT обнулился! 
(Все данные в таблице удалились тоже. Будте осторожны!)

Спасибо огромное!  smile 

Вопрос закрыт! smile 

Автор: Golda 27.1.2008, 09:07
MoLeX, sTa1kEr не утверждал, что Ваш вариант запроса не сбросит автоинкремент. Он обращал Ваше внимание на то, что этот запрос, кроме сброса sequence для автоинкрементного поля, может привести и к другим последствиям. И прежде чем его применять, стоит разобраться, к каким именно и в каком случае. Так что то, что Вы проверили значение нового id   после этого запроса, ничего не меняет

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)