Reset число строк в SQLite3/MySQL

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

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

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

Ответы

Ответ 1

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 Reset Поле основного ключа

MySQL

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

ALTER TABLE tbl AUTO_INCREMENT = 1;

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

Ответ 2

Для MySQL:

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

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

Для SQLite:

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

Ссылки

SQLite AutoIncrement
MySQL AutoIncrement

Ответ 3

Для использования SQLite (не нужно удалять и создавать таблицу)

UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='table_name';

Для использования MySql

ALTER TABLE table_name AUTO_INCREMENT = 1;

Ответ 4

В этом случае вы не должны использовать AUTOINCREMENT. Просто укажите свой первичный ключ как INTEGER PRIMARY KEY, и счетчик будет reset до 1 после запроса DELETE FROM. Без AUTOINCREMENT поведение по умолчанию будет по-прежнему являться автоматическим приращением первичного ключа до тех пор, пока вы не закончите пространство в своей таблице (в этом случае значения old-deleted - будут повторно использованы).

Дополнительная информация доступна в документе SQLite Autoincrement.

Ответ 5

ALTER TABLE tbl AUTO_INCREMENT = 0;