Сброс количества строк в SQLite3 / MySQL - PullRequest
17 голосов
/ 09 августа 2010

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

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

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

Ответы [ 5 ]

32 голосов
/ 09 августа 2010

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;

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

11 голосов
/ 09 августа 2010

Для MySQL:

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

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

Для SQLite:

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

Ссылки

SQLite AutoIncrement
MySQL AutoIncrement

7 голосов
/ 05 октября 2012

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

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

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

ALTER TABLE table_name AUTO_INCREMENT = 1;
6 голосов
/ 01 июля 2011

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

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

0 голосов
/ 09 августа 2010
ALTER TABLE tbl AUTO_INCREMENT = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...