Сброс счетчика номеров строк в SQLite3 / MySQL

Я использую SQLite3. Я загружаю таблицу, скажем, из 30 строк, используя целое число в качестве основного идентификатора, и оно автоматически увеличивается.

Теперь я удаляю все строки из таблицы, а затем перезагрузите некоторую новую информацию в таблицу.

Проблема в том, что количество строк (мой PrimaryID) теперь начинается с 31. Можно ли как-нибудь начать загрузку новых строк с номера 1 и далее?

17
задан Bill the Lizard 22 May 2011 в 13:56
поделиться

3 ответа

SQLite

Использование:

DELETE FROM your_table;    
DELETE FROM sqlite_sequence WHERE name = 'your_table';

Документация

SQLite отслеживает наибольший ROWID, который когда-либо содержала таблица, используя специальную таблицу SQLITE_SEQUENCE. Таблица SQLITE_SEQUENCE создается и инициализируется автоматически при создании обычной таблицы, содержащей столбец AUTOINCREMENT. Содержимое таблицы SQLITE_SEQUENCE может быть изменено с помощью обычных операторов UPDATE, INSERT и DELETE. Однако внесение изменений в эту таблицу, скорее всего, нарушит алгоритм генерации ключей AUTOINCREMENT. Убедитесь, что вы знаете, что делаете, прежде чем приступать к таким изменениям.

Нашел ответ на SO: SQLite Сброс поля первичного ключа

MySQL

Использование:

ALTER TABLE tbl AUTO_INCREMENT = 1;

В любом случае, базу данных не волнует, последовательны ли номера id - только то, что значения уникальны. Если пользователи никогда не видят значение первичного ключа (а они и не должны видеть, потому что данные могут меняться и не всегда будут соответствовать значению первичного ключа), я бы не стал заморачиваться с этими опциями.

32
ответ дан 30 November 2019 в 10:24
поделиться

Для MySQL:

Используйте TRUNCATE TABLE имя таблицы , чтобы очистить таблицу (удалить все записи) и сбросить счетчик автоматического увеличения.

Вы также можете использовать ALTER TABLE tablename AUTO_INCREMENT = 0; , если вы просто хотите сбросить счетчик.

Для SQLite:

DELETE FROM tablename;
DELETE FROM SQLITE_SEQUENCE WHERE name='tablename';

Ссылки

Автоинкремент SQLite
Автоинкремент MySQL

11
ответ дан 30 November 2019 в 10:24
поделиться
ALTER TABLE tbl AUTO_INCREMENT = 0;
0
ответ дан 30 November 2019 в 10:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: