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;