使用SQL语句获取SQLite中的表定义

浏览:
字体:
发布时间:2013-12-13 14:31:24
来源:

1. 问题提出

有人问,在sqlite中怎么用sql语句得到一个表的列定义语句。第一反应,可能就是用.schema <tablename>

可是这是sqlite的shell命令行。

使用代码,好像得不到结果。

幸好,sqlite它有比较特殊的系统表:

sqlite_master

sqlite_temp_master

这两张系统表的表结构完全相同,如下所示:

sqlite> .schema sqlite_masterCREATE TABLE sqlite_master (  type text,  name text,  tbl_name text,  rootpage integer,  sql text);sqlite> .schema sqlite_temp_masterCREATE TEMP TABLE sqlite_temp_master (  type text,  name text,  tbl_name text,  rootpage integer,  sql text);2. 实例说明

我们通过实例来说明,看看.schema相当于什么样的sql语句执行结果:

sqlite> create table t(id int);sqlite> create temporary table t(id int, col2 varchar(32));sqlite> insert into t values(1);Error: table t has 2 columns but 1 values were suppliedsqlite> drop table t;sqlite> .tablestsqlite> insert into t values(1);sqlite> create temporary table t(id int, col2 varchar(32));sqlite> insert into t values(2, 'wang');sqlite> .schema tCREATE TABLE t(id int);CREATE TABLE t(id int, col2 varchar(32));sqlite> select sql from sqlite_master where tbl_name='t';CREATE TABLE t(id int)sqlite> select sql from sqlite_temp_master where tbl_name='t';CREATE TABLE t(id int, col2 varchar(32))sqlite> select sql from sqlite_master where tbl_name='t' and type='table' union all select sql fromsqlite_temp_master where tbl_name='t' and type='table';CREATE TABLE t(id int)CREATE TABLE t(id int, col2 varchar(32))sqlite>
我们看到,创建了两个表,都叫t, 一个是临时表,一个是非临时的。

 创建完以后,在插入数据时,它优先认可临时表。

当我们运行.schema t时,会把两张表都列出来。

然后通过查询sqlite_master中的sql字段可以得到非临时表的建表信息,sqlite_temp_master中的sql字段能得到临时表的信息。两者的union就会得到所有表的信息。

所以:

.schema <t>

等价于:

 select sql from sqlite_master where tbl_name='<t>' and type='table' union all select sql from
sqlite_temp_master where tbl_name='<t>' and type='table';

>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();