web-dev-qa-db-ja.com

SQLite3 / MySQLの行番号カウントをリセットします

私はSQLite3を使用しています。プライマリIDとして整数を使用して、たとえば30行のテーブルをロードすると、自動インクリメントされます。

次に、テーブルからすべての行を削除してから、いくつかの新しい情報をテーブルに再読み込みします。

問題は次のとおりです。行数(私のPrimaryID)は31から始まります。番号1以降で新しい行のロードを開始する方法はありますか?

17
Maddy

SQLite

使用する:

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

ドキュメント

SQLiteは、特別なSQLITE_SEQUENCEテーブルを使用して、テーブルがこれまでに保持した最大のROWIDを追跡します。 SQLITE_SEQUENCEテーブルは、AUTOINCREMENT列を含む通常のテーブルが作成されるたびに自動的に作成および初期化されます。 SQLITE_SEQUENCEテーブルの内容は、通常のUPDATE、INSERT、およびDELETEステートメントを使用して変更できます。ただし、このテーブルに変更を加えると、AUTOINCREMENTキー生成アルゴリズムが混乱する可能性があります。このような変更を行う前に、自分が何をしているかを確認してください。

SOで答えが見つかりました: SQLite Reset Primary Key Field

MySQL

使用する:

ALTER TABLE tbl AUTO_INCREMENT = 1;

いずれの場合も、データベースはID番号が連続しているかどうかを気にせず、値が一意であるだけです。ユーザーが主キーの値を表示しない場合(データは変更される可能性があり、常にその主キーの値になるとは限らないため、表示されるべきではありません)、これらのオプションを気にする必要はありません。

32
OMG Ponies

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

12
quantumSoup

SQLiteで使用する場合(テーブルを削除して作成する必要はありません)

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

MySqlを使用する場合

ALTER TABLE table_name AUTO_INCREMENT = 1;
7
williambarau

この場合、AUTOINCREMENTを使用しないでください。主キーをINTEGER PRIMARY KEYとして定義するだけで、DELETE FROMクエリの後にカウントが1にリセットされます。 AUTOINCREMENTがない場合でも、テーブルのスペースが不足しない限り、デフォルトの動作は主キーの自動インクリメントになります(その場合、古い-削除された-値が再利用されます)。

詳細については、 SQLite Autoincrement ドキュメントを参照してください。

6
Tom Ace
ALTER TABLE tbl AUTO_INCREMENT = 0;
0
websch01ar