以sqlite_
開頭的對象名稱保留;即使你想要,你也不能直接創建它們。 (但您更改其中一些內容,您可以刪除sqlite_stat
*表。)
當創建具有AUTOINCREMENT列的表時,將自動創建sqlite_sequence
表。 首先需要創建表的實際序列值的記錄。 如果要保存/恢復序列值,則必須重新插入舊值。
sqlite_stat
*表由ANALYZE創建。 導入SQL文本後運行ANALYZE將是最簡單但很慢的;通過在不會分析的表上運行ANALYZE(例如sqlite_master
),然後手動插入舊記錄,可以更快地創建一個空的sqlite_stat
*表。
所有這一切都在sqlite3
命令行工具的.dump
命令來實現(源代碼shell.c
):
SQLite version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> create table t(x integer primary key autoincrement);
sqlite> insert into t default values;
sqlite> insert into t default values;
sqlite> analyze;
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE t(x integer primary key autoincrement);
INSERT INTO "t" VALUES(1);
INSERT INTO "t" VALUES(2);
ANALYZE sqlite_master;
INSERT INTO "sqlite_stat1" VALUES('t',NULL,'2');
DELETE FROM sqlite_sequence;
INSERT INTO "sqlite_sequence" VALUES('t',2);
COMMIT;
sqlite>
謝謝!但是還有一個問題,在插入之前調用'ANALYZE'給出與插入後調用它相同的結果? – ST3
插入什麼? –
插入舊記錄。 – ST3