SQLite 简单教程

来源:互联网 发布:黄石弓箭 淘宝 编辑:程序博客网 时间:2024/05/16 15:15

入门

使用sqlite,需要在命令行(sqlite3 程序自行到官方网站下载)输入"sqlite3" 后跟 SQLite 数据库文件名,如果文件不存在就会自动新建一个新的数据库。然后你可以直接输入SQL语句,再按下"Enter"键来执行。

例如,新建一个名为 "ex1"的 SQLite 数据库,再为它新建一个 "tb1" 的数据表,你可以这样做:

$ sqlite3 ex1
SQLite version 3.3.10
Enter ".help" for instructions
sqlite> create table tbl1(one varchar(10), two smallint);
sqlite> insert into tbl1 values('hello!',10);
sqlite> insert into tbl1 values('goodbye', 20);
sqlite> select * from tbl1;
hello!|10
goodbye|20
sqlite>

你可以输入系统的结束字符(通常使用 Control-D)或者中断字符(通常使用 Control-C)来结束 sqlite3 程序。

你要确保在每条SQL语句后面输入分号,Sqlite3 会寻找分号(;)来识别SQL语句是否完成。如果你漏掉了分号,sqlite3 会提示你继续输入,这个特性允许你输入多行的SQL命令。例如:

sqlite> CREATE TABLE tbl2 (
    ...>    f1 varchar(30) primary key,
    ...>    f2 text,
    ...>    f3 real
    ...> );
sqlite>

查询 SQLITE_MASTER 表

一个SQLite数据库的数据结构是存贮在 "sqlite_master" 表中。你可以像其他数据表一样对 sqlite_master 表执行 “SELECT” 语句,例如:

$ sqlite3 ex1
SQlite vresion 3.3.10
Enter ".help" for instructions
sqlite> select * from sqlite_master;
     type = table
     name = tbl1
tbl_name = tbl1
rootpage = 3
      sql = create table tbl1(one varchar(10), two smallint)
sqlite>

但是你不能够对sqlite_master 表执行 DROP TABLE, UPDATE, INSERT or DELETE ,当你创建或者删除表的时候,sqlite_master 表会自动更新。你不能手工改变 sqlite_master 表。

临时表的结构不会存贮到 sqlite_master 表中,临时表是存贮在另一个特殊的表,叫做 "sqlite_temp_master"。"sqlite_temp_master" 表本身就是临时的。

将结果写到文件

默认情况下,sqlite3会将结果发送到标准输出,你可以使用 ".output" 来改变,只是将输出到的文件名作为参数传递给 .output,所有后面的查询结果都会写到文件里。开头使用 ".output stdout" 会再次写到标准输出,例如:

sqlite> .mode list
sqlite> .separator |
sqlite> .output test_file_1.txt
sqlite> select * from tbl1;
sqlite> .exit
$ cat test_file_1.txt
hello|10
goodbye|20
$

查询数据库结构

sqlite3 提供了很多方便的命令用来查看数据库的结构,这些命令只是提供一个缩写。

例如,查看数据库的数据表的一个列表,你可以输入 ".tables":

sqlite> .tables
tbl1
tbl2
sqlite>

".tables" 命令和一下的查询相似:

SELECT name FROM sqlite_master 
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1

事实上,如果你查看 sqlite3 的源代码(在 /src/shell.c 中),你会找到上面具体查询。

".indices" 命令以相似的方法列出一个特殊表的索引。".indices" 命令以一个数据表的名字作为参数。左后是".schema" 命令,不带参数的 .schema 命令会显示用来创建数据库的 “CREATE TABLE and CREATEINDEX” 语句,如果你给一个表名为参数,他会显示用来创建表和索引(如果有的话)的 CREATE 语句。

sqlite> .schema
create table tbl1(one varchar(10), two smallint)
CREATE TABLE tbl2 (
   f1 varchar(30) primary key,
   f2 text,
   f3 real
)
sqlite> .schema tbl2
CREATE TABLE tbl2 (
   f1 varchar(30) primary key,
   f2 text,
   f3 real
)

在查询中使用 "%s" 来代替你的参数,可以让你查看数据库子集的结构。

sqlite> .schema %abc%

备份数据库到 ASCII 码的文本文件

使用 ".dump" 命令来导出数据库的内容到ASCII 文本文件。这个文件可以被还原回原来sqlite3的数据库。

备份数据库的一个好方法:

$ echo '.dump' | sqlite3 ex1 | gzip -c >ex1.dump.gz

这里会生成一个名字为 ex1.dump.gz 的文件,这个文件包含你以后需要重构数据库的所有内容,为了重构这个数据可,你需要输入:

$ zcat ex1.dump.gz | sqlite3 ex2

这个文本的格式是纯 SQL ,所以你也能够使用 .dump 命令来导出一个 SQLite 数据库到其他的流行的数据库引擎,像这样:

$ createdb ex2
$ sqlite3 ex1 .dump | psql ex2

其他sqlite的特别用法

sqlite可以在shell底下直接执行命令:

sqlite3 film.db "select * from film;"

输出 HTML 表格:

sqlite3 -html film.db "select * from film;"

将数据库「倒出来」:

sqlite3 film.db ".dump" > output.sql

利用输出的资料,建立一个一模一样的数据库(加上以上指令,就是标准的SQL数据库备份了):

sqlite3 film.db < output.sql

在大量插入资料时,你可能会需要先打这个指令:

begin;

插入完资料后要记得打这个指令,资料才会写进数据库中:

commit;

原创粉丝点击