Small. Fast. Reliable.
Choose any three.
模式表

1.简介

每个SQLite数据库都包含一个“模式表”,用于存储该数据库的架构。数据库的模式是对数据库中包含的所有其他表,索引,触发器和视图的描述。模式表如下所示:

创建表sqlite_schema(
  输入文字,
  命名文字,
  tbl_name文字,
  根页整数,
  sql文本
);

sqlite_schema表针对架构中的每个表,索引,视图和触发器(统称为“对象”)包含一行,但sqlite_schema表本身没有条目。有关SQLite如何在内部使用sqlite_schema表的其他信息,请参见文件格式文档的 模式存储小节。

2.替代名称

可以始终使用名称“ sqlite_schema”来引用模式表,尤其是如果通过模式名称(例如“ main.sqlite_schema”或“ temp.sqlite_schema”)来限定时。但是出于历史兼容性,还可以识别一些备用名称,包括:

  1. sqlite_master
  2. sqlite_temp_schema
  3. sqlite_temp_master

备选方案(2)和(3)仅适用于与每个数据库连接关联的TEMP数据库,而备选方案(1)在任何地方都有效。由于历史原因,来自sqlite3_set_authorizer() 接口的回调始终使用名称(1)或(3)引用架构表。

3.模式表的解释

模式表的字段的含义如下:

类型

sqlite_schema.type列将是以下文本字符串之一:“ table”,“ index”,“ view”或“ trigger”(根据定义的对象类型)。'table'字符串用于普通虚拟表

名称

sqlite_schema.name列将保存对象的名称。(对表的UNIQUEPRIMARY KEY约束使SQLite创建 名称形式为“ sqlite_autoindex_TABLE_N”的内部索引,其中TABLE替换为包含约束的表的名称,并且N是一个以1开头并以1递增的整数。在WITHOUT ROWID表中没有PRIMARY KEY的sqlite_schema条目,但为PRIMARY KEY保留了“ sqlite_autoindex_TABLE_N”名称,就像sqlite_schema条目确实存在一样。随后的UNIQUE约束。“ sqlite_autoindex_TABLE_N” ,无论是在rowid表中还是在WITHOUT ROWID表中。

tbl_name

sqlite_schema.tbl_name列包含与该对象关联的表或视图的名称。对于表或视图,tbl_name列是name列的副本。对于索引,tbl_name是被索引表的名称。对于触发器,tbl_name列存储导致触发器触发的表或视图的名称。

根网页

sqlite_schema.rootpage列存储表和索引的根b树页面的页码。对于定义视图,触发器和虚拟表的行,根页列为0或NULL。

sql

sqlite_schema.sql列存储描述对象的SQL文本。该SQL文本是CREATE TABLECREATE VIRTUAL TABLECREATE INDEXCREATE VIEWCREATE TRIGGER语句,如果针对数据库文件进行评估(如果它是数据库连接的主数据库), 则会重新创建该对象。文本通常是用于创建对象的原始语句的副本,但是应用了规范化,因此文本符合以下规则:

  • 语句开头的CREATE,TABLE,VIEW,TRIGGER和INDEX关键字将转换为所有大写字母。
  • 如果TEMP或TEMPORARY关键字出现在初始CREATE关键字之后,则将其删除。
  • 删除在创建对象名称之前出现的所有数据库名称限定符。
  • 前导空格已删除。
  • 前两个关键字之后的所有空格都将转换为一个空格。

sqlite_schema.sql列中的文本是创建对象的原始CREATE语句文本的副本,但如上所述和通过后续ALTER TABLE语句进行了修改的规范除外。对于由UNIQUEPRIMARY KEY约束自动创建的内部索引,sqlite_schema.sql为NULL 。