「自動生成された」スクリプトが.dump
データベース全体を意味する場合は、create table
ステートメントとステートメントが含まれるinsert
ため、おそらくupdate
一緒に実行する必要があります。
自動生成されたスクリプトを変更すると、必要に応じてseq値を明らかに変更できます。
ドキュメントの内容は次のとおりです。
SQLiteは、特別なSQLITE_SEQUENCEテーブルを使用して、テーブルがこれまでに保持した最大のROWIDを追跡します。SQLITE_SEQUENCE表は、AUTOINCREMENT列を含む通常の表が作成されるたびに自動的に作成および初期化されます。SQLITE_SEQUENCEテーブルの内容は、通常のUPDATE、INSERT、およびDELETEステートメントを使用して変更できます。ただし、このテーブルに変更を加えると、AUTOINCREMENTキー生成アルゴリズムが混乱する可能性があります。このような変更を行う前に、自分が何をしているかを確認してください。
最後に、seq値が最大値と一致することを確認する必要があります。これは次のことを示しています。
sqlite> create table foo (a INTEGER PRIMARY KEY AUTOINCREMENT, b text);
sqlite> insert into foo values (NULL, 'blabla');
sqlite> select * from foo;
1|blabla
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE foo (a INTEGER PRIMARY KEY AUTOINCREMENT, b text);
INSERT INTO "foo" VALUES(1,'blabla');
DELETE FROM sqlite_sequence;
INSERT INTO "sqlite_sequence" VALUES('foo',1);
COMMIT;