1.创建数据库Student.db3(格式:SQLite可执行文件名 数据库名)
运行DOS shell,进入工作目录,在命令行上键入sqlite3命令,命令后跟随一个可选的数据库文件名。如果在命令行上不指定数据库名,SQLite将会使用一个内存数据库,其内容在退出CLP时将会丢失。
CLP以交互形式运行,你可以在其上执行查询、获得schema信息、导入/导出数据和执行其它各种各样的数据库任务。CLP认为你输入的任何语句都是一个查询命令(query),除非命令是以点(.)开始,这些命令用于特殊操作。键入.help或.h可以得到这些操作的完整列表。键入.exit 或.e退出CLP。
例如我们编译Sqlite数据库源码生成的可执行文件名是Sqlite3.exe,则我们创建数据库Student.db3的语句就是:Sqlite3 Student.db3
尽管我们提供了数据库名,但如果这个数据库并不存在,SQLite并不会真正地创建它。SQLite会等到你真正地向其中增加了数据库对象之后才创建它,比如在其中创建了表或视图。这样做的原因是给你机会在将数据库写到外部文件之前对数据库做一些永久性的设置,如页的大小等。有些设置,如页大小、字符集(UTF-8或UTF-16)等,一旦数据库创建之后就不能再修改了。这个中间期是你能改它们的唯一机会。我们采用默认设置,因此,要将数据库写到磁盘,我们仅需要在其中创建一个表。输入如下语句:
sqlite> create table test (id integer primary key, value text);
现在你有了一个称为Stuent.db3的数据库文件,其中包含一个表test,该表包含两个字段。
2.创建表
sqlite> create table test (id integer primary key, value text);
注意:SQL语句以';'号结束。
该表包含两个字段。
?一个称为id的主键字段,它带有自动增长属性。无论何时你定义一个整型主键字段,SQLite 都会对该字段应用自动增长属性。
?一个简单的称为value的文本字段。
3.插入语句到表
向表中插入几行数据:
sqlite> insert into test (value) values('eenie');
sqlite> insert into test (value) values('meenie');
sqlite> insert into test (value) values('miny');
sqlite> insert into test (value) values('mo');
4.查询表的内容
sqlite> .mode column
sqlite> .headers on
sqlite> SELECT * FROM test;
SELECT语句前的两个命令(.headers and .mode)用于改进输出的格式,就是显示表的字段并每个字段之间都有间隔。
5.查询当前数据库的内容
sqlite> create view schema as select * from sqlite_master;
sqlite_master数据库中的字段分别是(type,name,tbl_name,rootpage,sql),分别表示(类型(如 表,视图,索引等),名字,表名,页号,创建时的SQL语句)。这个表我认为很重要,可以用来判断当前数据库中是否存在某一个表或者是用来备份创建语句。
6.创建视图
sqlite> create view [视图名] as select * from [要创建视图的表];
如:在表sqlite_master上创建视图StuSchema:
sqlite> create view StuSchema as select * from sqlite_master;
7.创建索引
sqlite> create index test_idx on test (value);
8.获得数据库的Schema信息
有几个shell命令用于获得有关数据库内容的信息。你可以键入命令.tables[pattern]来得到所有表和视图的列表,其中[pattern]可以是任何类SQL的操作符。执行上述命令会返回符合条件的所有表和视图,如果没有pattern项,返回所有表和视图。
sqlite> .tables
schema test
可以看到我们创建的表test和视图schema。同样的,要显示一个表的索引,可以键入命令.indices [tablename]:
sqlite> .indices test
test_idx
可以看到我们为表test所创建的名为test_idx的索引。使用.schema [table name]可以得到一个表或视图的定义(DDL)语句。如果没提供表名,则返回所有数据库对象(包括table、indexe、view和index)的定义语句:
sqlite> .schema test
CREATE TABLE test (id integer primary key,value text);
CREATE INDEX test_idx on test (value);
sqlite> .schema
CREATE TABLE test (id integer primary key,value text);
CREATE VIEW schema as select * fromsqlite_master;
CREATE INDEX test_idx on test (value);
更详细的schema信息可以通过SQLite唯一的一个系统视图sqlite_master得到。这个视图是一个系统目录,它的结构如表2-1所示。
表2-1 sqlite_master表结构
编号 |
字段 |
说明 |
1 |
type |
值为"table"、 "index"、 "trigger"或"view"之一。 |
2 |
name |
对象名称,值为字符串。 |
3 |
tbl_name |
如果是表或视图对象,此字段值与字段2相同。如果是索引或触发器对象,此字段值为与其相关的表名。 |
4 |
rootpage |
对触发器或视图对象,此字段值为0。对表或索引对象,此字段值为其根页的编号。 |
5 |
SQL |
字符串,创建此对象时所使用的SQL语句。 |
查询当前数据库的sqlite_master表,返回:
sqlite> .mode col
sqlite> .headers on
sqlite> select type, name, tbl_name, sqlfrom sqlite_master order by type;
type name tbl_name sql
---------
index test_idx test CREATE INDEX test_idx on test (value)
table test test CREATE TABLE test (id integer primary
view schema schema CREATE VIEW schema as select * from s
■Tip:使用向上的箭头键可以回滚到前面输入过的命令。
备注:
1.SQL不区分大小写,但是,SQLite对字符串的值是大小写敏感的。
2.为了增加输出的易读性,你应把下面命令首先在SQLite的CPL命令下执行:
.echo on
.mode column
.headers on
.nullvalue NULL
3.Sqlite数据库表都内置了一个默认字段rowid,这个字段顾名思义就是表中记录号的意思:select rowid from 表名;rowid对于我们的排序等都很有用,任何一个sqlite表都存在这个字段。