SQLite怎么统计一个数据库中有多少张表,视图或者触发器 .
sqlite数据库中表、视图和触发器的基本信息存储在一张叫做sqlite_master的系统表中,所以要想统计有多少张表就要先学习sqlite_master表。
每一个sqlite数据库都有一张叫做sqlite_master的表,它定义数据库的模式。sqlite_master的表结构如下:
CREATE TABLE sqlite_master (
type TEXT,
name TEXT,
tbl_name TEXT,
rootpage INTEGER,
sql TEXT
);
type字段的内容是数据库单元(不知道这么叫恰不恰当...)的属性,比如table。view,trigger等。如果是一张表的话,type字段的内容是‘table’,name字段则是表的名字,tbl_name对于表没有差别也是表的名字(对于索引才有差别)。rootpage我从网络上搜索了很多资料好像都没有详细说明这个字段是用来干什么的,我也不好乱去猜测,有知道请留言哈!sql字段就是创建表或者索引的SQL语句。
对于索引而言,不同于于表的是:type等于‘index’,name是索引的名字,tbl_name是该索引所属的表的名字。对于自动创建的索引(用来实现PRIMARY KEY或 UNIQUE约束),sql字段为NULL。
sqlite_master表是只读的(这像视图),不能对它使用update,insert或delete。它会被create table、create index、drop table和drop index命令自动更新(这像触发器)。
临时表不会出现在sqlite_master中。临时表及其索引和触发器存放在另外一个叫sqlite_temp_master的表中。sqlite_temp_master和sqlite_master表结构一样,但它只是对
于创建那些临时表的应用可见。如果要获取所有表的列表,不管是永久的还是临时的,可以使用类似下面的SQL命令:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type=’table’
ORDER BY name
举个例子:
在test.db 数据库中有两张表,通过SQL:select * from sqlite_master;我们可以看到sqlite_master中的内容和我们预期的一样,至于rootpage LZ真的不知道是什么意思额,table1和table2两张表是一样的表结构的,但是rootpage的值一个是2一个却是3.。。。
对 sqlite_master有了一定的了解后我们就可以解决标题中的问题(SQLite怎么统计一个数据库中有多少张表,视图或者触发器)了。
下面是我总结的几条针对这个问题的SQL,可以根据自己的需求灵活去更改SQL以获取自己需要的结果。
查看表的总数SQL:
select count(1) from sqlite_master where type in('table');
或
select count(1) from sqlite_master where type = 'table';
查看视图的总数SQL:
select count(1) from sqlite_master where type in('view');
或
select count(1) from sqlite_master where type = 'view';
查看表以及视图的总数:
select count(1) from sqlite_master where type in('table','view');
验证一下是否正确:
test.db中有两张表和一张视图,没有触发器,执行SQL:select count(1) from sqlite_master where type in('table','view','trigger');得到的结果是1+2+0=3,。单独去验证也都是正确的。