我已经通过PHP脚本创建了一个新的SQLLite数据库以实现快速MVP。
在将数据库结构与传递给我的文件进行比较时,我可以理解新数据库中缺少一些sys / *表。 使用DB Browser for SQLLite
可以发现差异我一直在阅读SQLLite文档,似乎只有一个sys表-sysmaster-可以隐式查询。
所以我的问题是,这些其他表是sys / version还是类似的东西? 他们需要吗?它们是否引用了SQLite的早期版本(例如v2)?
谢谢
答案 0 :(得分:2)
在将数据库结构与已传递的文件进行比较时 对我来说,我很感谢缺少一些sys / *表 从我的新数据库中丢失了。
sys 表不是SQLite系统表,因此是用户定义的表。
我一直在阅读SQLLite文档,似乎 只有一个sys表-sysmaster-可以隐式地是 查询。
所有SQLite系统表均以 sqlite _
开头唯一必须存在的是 sqlite_master ,这是数据库的架构。
其他人可能按照:-
如果任何表包含AUTOINCREMENT关键字(仅限于仅用作rowid列的别名),则sqlite_sequence 将存在。
sqlite_statn (其中n是1-4的数字)在运行ANALYZE时创建。
sqlite_autoindex _ * ????是在使用UNIQUE和PRIMARY KEY约束而不是 rowid
的别名时创建的SQLite系统表都是隐式访问的,也可以访问所有表,甚至可以更改某些表(后果自负)。
sqlite_master 不能更改,例如尝试运行:-
INSERT INTO sqlite_master VALUES('table','ooops','ooops','CREATE TABLE ooops (COL1 TEXT)');
结果:-
INSERT INTO sqlite_master VALUES('table','ooops','ooops','CREATE TABLE ooops (COL1 TEXT)')
> table sqlite_master may not be modified
> Time: 0s
也许考虑以下几点:-
DROP TABLE IF EXISTS mytable1;
CREATE TABLE IF NOT EXISTS mytable1 (
id INTEGER PRIMARY KEY AUTOINCREMENT, -- autoincrement results in sqlite_sequence being created
COL1 TEXT UNIQUE -- UNIQUE results in an sqlite_autoindex table being created
);
ANALYZE; -- will result in sqlite_stat1 being created
SELECT * FROM sqlite_master; -- RESULT1
SELECT * FROM sqlite_stat1; -- RESULT2
SELECT * FROM sqlite_sequence; -- RESULT3
INSERT INTO mytable1 (COL1) VALUES ('A'),('B'),('C'); -- will result in sqlite_sequence being updated
SELECT * FROM sqlite_sequence; -- RESULT4
UPDATE sqlite_sequence SET seq = 100 WHERE name = 'mytable1'; -- naughty
INSERT INTO mytable1 (COL1) VALUES ('X'),('Y'),('Z');
SELECT * FROM sqlite_sequence; -- RESULT5
SELECT * FROM mytable1; -- RESULT6
查询的结果是:-
即已创建Sqlite表 sqlite_stat1 , sqlite_sequence 和 sqlite_autoindex_mytable1_1 。
即 sqlite_stat1 为空(无需进行任何分析)
即 sqlite_sequence 为空(未将行插入到mytable1中)
在mytable1中插入3行后 sqlite_sequence 在mytable1中有一行,其seq值为3(最后插入的rowid)。
将seq值也更新100后,将另外3行添加到mytable1中,seq数已增加到103
和 mytable 具有预期的6行,但 id (rowid列的别名)在3到100之后跳了(因为 sqlite_sequence 已更改):-
所以我的问题是,这些其他表是sys / version还是 像那样的东西?他们需要吗?他们是否参考以前的版本 SQLite(例如v2)?
希望以上回答最多。但作为总结,也许让SQLite管理它的系统表。您可能希望阅读Database File Format - 2.6.1. Internal Schema Objects至第3节。