私はSQLite3を使用しています。プライマリIDとして整数を使用して、たとえば30行のテーブルをロードすると、自動インクリメントされます。
次に、テーブルからすべての行を削除してから、いくつかの新しい情報をテーブルに再読み込みします。
問題は次のとおりです。行数(私のPrimaryID)は31から始まります。番号1以降で新しい行のロードを開始する方法はありますか?
使用する:
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
使用する:
ALTER TABLE tbl AUTO_INCREMENT = 1;
いずれの場合も、データベースはID番号が連続しているかどうかを気にせず、値が一意であるだけです。ユーザーが主キーの値を表示しない場合(データは変更される可能性があり、常にその主キーの値になるとは限らないため、表示されるべきではありません)、これらのオプションを気にする必要はありません。
MySQLの場合:
TRUNCATE TABLE tablename
を使用してテーブルを空にし(すべてのレコードを削除)、自動インクリメントカウントをリセットします。
カウントをリセットするだけの場合は、ALTER TABLE tablename AUTO_INCREMENT = 0;
を使用することもできます。
SQLiteの場合:
DELETE FROM tablename;
DELETE FROM SQLITE_SEQUENCE WHERE name='tablename';
SQLiteで使用する場合(テーブルを削除して作成する必要はありません)
UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='table_name';
MySqlを使用する場合
ALTER TABLE table_name AUTO_INCREMENT = 1;
この場合、AUTOINCREMENT
を使用しないでください。主キーをINTEGER PRIMARY KEY
として定義するだけで、DELETE FROM
クエリの後にカウントが1にリセットされます。 AUTOINCREMENTがない場合でも、テーブルのスペースが不足しない限り、デフォルトの動作は主キーの自動インクリメントになります(その場合、古い-削除された-値が再利用されます)。
詳細については、 SQLite Autoincrement ドキュメントを参照してください。
ALTER TABLE tbl AUTO_INCREMENT = 0;