SQLite怎么统计一个数据库中有多少张表,视图或者触发器 .
2017-06-03 10:43
1226 查看
sqlite数据库中表、视图和触发器的基本信息存储在一张叫做sqlite_master的系统表中,所以要想统计有多少张表就要先学习sqlite_master表。
每一个sqlite数据库都有一张叫做sqlite_master的表,它定义数据库的模式。sqlite_master的表结构如下:
对于索引而言,不同于于表的是: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命令:
举个例子:
在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,。单独去验证也都是正确的。
每一个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,。单独去验证也都是正确的。
相关文章推荐
- SQLite怎么统计一个数据库中有多少张表,视图或者触发器
- linux怎么用一个命令行统计出给定目录中有多少个子目录
- SQL 中怎么查询一个数据库中一共有多少个表
- 统计一个数据库中有多少个表
- 怎么用sql语句查询一个数据库有多少张表
- SQLSERVER 触发器 将一个服务器上的数据库中数据插入到另一个服务器上的数据库中怎么做
- linux怎么用一个命令行统计出给定目录中有多少个子目录
- 输入一行字符串,统计其中有多少个单词,单词之间用一个或者多个空格分隔开
- SQL 中怎么查询一个数据库中一共有多少个表
- 了解数据库视图建设的好处,和怎么建设;了解触发器trigger
- iOS 怎么将自己创建的一个对象存入数据库sqlite,例如:Person??
- SQL 中怎么查询一个数据库中一共有多少个表
- thinkPHP 怎么修改数据库的一个值,连贯操作,或者修改指定的值,在原来的基础上增添值
- SQL 中怎么查询一个数据库中一共有多少个表
- SQLite 一个轻量级别数据库
- [导入]给定一个英文原文,统计文件里面一共有多少个不同的英文单词
- 通过这样一个方法可以取得两个日期当中的日期数,或者去的多少天以后的时间
- 一个有关访问量统计的数据库设计以及isqlplus的一个设置问题
- 我查询一个存储过程,里面返回多个记录集,查询一个我会,查询多个数据库存取要怎么写?
- SQLite 一个轻量级别数据库