本章将向您讲解 SQLite 编程人员所使用的简单却有用的命令。这些命令被称为 SQLite 的点命令,这些命令的不同之处在于它们不以分号 ; 结束。
让我们在命令提示符下键入一个简单的 sqlite3 命令,在 SQLite 命令提示符下,您可以使用各种 SQLite 命令。
$ sqlite3 SQLite version 3.3.6 Enter ".help" for instructions sqlite>
如需获取可用的点命令的清单,可以在任何时候输入 ".help"。例如:
sqlite>.help
上面的命令会显示各种重要的 SQLite 点命令的列表,如下所示:
命令 描述 .backup ?DB? FILE 备份 DB 数据库(默认是 "main")到 FILE 文件。 .bail ON|OFF 发生错误后停止。默认为 OFF。 .databases 列出附加数据库的名称和文件。 .dump ?TABLE? 以 SQL 文本格式转储数据库。如果指定了 TABLE 表,则只转储匹配 LIKE 模式的 TABLE 表。 .echo ON|OFF 开启或关闭 echo 命令。 .exit 退出 SQLite 提示符。 .explain ON|OFF 开启或关闭适合于 EXPLAIN 的输出模式。如果没有带参数,则为 EXPLAIN on,及开启 EXPLAIN。 .header(s) ON|OFF 开启或关闭头部显示。 .help 显示消息。 .import FILE TABLE 导入来自 FILE 文件的数据到 TABLE 表中。 .indices ?TABLE? 显示所有索引的名称。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表的索引。 .load FILE ?ENTRY? 加载一个扩展库。 .log FILE|off 开启或关闭日志。FILE 文件可以是 stderr(标准错误)/stdout(标准输出)。 .mode MODE 设置输出模式,MODE 可以是下列之一:-
csv 逗号分隔的值
-
column 左对齐的列
-
html HTML 的 代码
-
insert TABLE 表的 SQL 插入(insert)语句
-
line 每行一个值
-
list 由 .separator 字符串分隔的值
-
tabs 由 Tab 分隔的值
-
tcl TCL 列表元素
让我们尝试使用 .show 命令,来查看 SQLite 命令提示符的默认设置。
sqlite>.show echo: off explain: off headers: off mode: column nullvalue: "" output: stdout separator: "|" width: sqlite>确保 sqlite> 提示符与点命令之间没有空格,否则将无法正常工作。 格式化输出
您可以使用下列的点命令来格式化输出为本教程下面所列出的格式:
sqlite>.header on sqlite>.mode column sqlite>.timer on sqlite>
上面设置将产生如下格式的输出:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0 CPU Time: user 0.000000 sys 0.000000sqlite_master 表格
主表中保存数据库表的关键信息,并把它命名为 sqlite_master。如要查看表概要,可按如下操作:
sqlite>.schema sqlite_master
这将产生如下结果:
CREATE TABLE sqlite_master ( type text, name text, tbl_name text, rootpage integer, sql text);
SQLite 语法SQLite 是遵循一套独特的称为语法的规则和准则。本教程列出了所有基本的 SQLite 语法,向您提供了一个 SQLite 快速入门。
大小写敏感性有个重要的点值得注意,SQLite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义。
注释SQLite 注释是附加的注释,可以在 SQLite 代码中添加注释以增加其可读性,他们可以出现在任何空白处,包括在表达式内和其他 SQL 语句的中间,但它们不能嵌套。
SQL 注释以两个连续的 "-" 字符(ASCII 0x2d)开始,并扩展至下一个换行符(ASCII 0x0a)或直到输入结束,以先到者为准。
您也可以使用 C 风格的注释,以 "/*" 开始,并扩展至下一个 "*/" 字符对或直到输入结束,以先到者为准。SQLite的注释可以跨越多行。
sqlite>.help -- This is a single line commentSQLite 语句所有的 SQLite 语句可以以任何关键字开始,如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP 等,所有的语句以分号(;)结束。
SQLite ANALYZE 语句:ANALYZE; or ANALYZE database_name; or ANALYZE database_name.table_name;SQLite AND/OR 子句:SELECT column1, column2....columnN FROM table_name WHERE CONDITION-1 {AND|OR} CONDITION-2;SQLite ALTER TABLE 语句:ALTER TABLE table_name ADD COLUMN column_def...;SQLite ALTER TABLE 语句(Rename):ALTER TABLE table_name RENAME TO new_table_name;SQLite ATTACH DATABASE 语句:ATTACH DATABASE 'DatabaseName' As 'Alias-Name';SQLite BEGIN TRANSACTION 语句:BEGIN; or BEGIN EXCLUSIVE TRANSACTION;SQLite BETWEEN 子句:SELECT column1, column2....columnN FROM table_name WHERE column_name BETWEEN val-1 AND val-2;SQLite COMMIT 语句:COMMIT;SQLite CREATE INDEX 语句:CREATE INDEX index_name ON table_name ( column_name COLLATE NOCASE );SQLite CREATE UNIQUE INDEX 语句:CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...columnN);SQLite CREATE TABLE 语句:CREATE TABLE table_name( column1 datatype, column2 datatype, column3 datatype, ..... columnN datatype, PRIMARY KEY( one or more columns ) );SQLite CREATE TRIGGER 语句:CREATE TRIGGER database_name.trigger_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN stmt1; stmt2; .... END;SQLite CREATE VIEW 语句:CREATE VIEW database_name.view_name AS SELECT statement....;SQLite CREATE VIRTUAL TABLE 语句:CREATE VIRTUAL TABLE database_name.table_name USING weblog( access.log ); or CREATE VIRTUAL TABLE database_name.table_name USING fts3( );SQLite COMMIT TRANSACTION 语句:COMMIT;SQLite COUNT 子句:SELECT COUNT(column_name) FROM table_name WHERE CONDITION;SQLite DELETE 语句:DELETE FROM table_name WHERE {CONDITION};SQLite DETACH DATABASE 语句:DETACH DATABASE 'Alias-Name';SQLite DISTINCT 子句:SELECT DISTINCT column1, column2....columnN FROM table_name;SQLite DROP INDEX 语句:DROP INDEX database_name.index_name;SQLite DROP TABLE 语句:DROP TABLE database_name.table_name;SQLite DROP VIEW 语句:DROP VIEW view_name;SQLite DROP TRIGGER 语句:DROP TRIGGER trigger_nameSQLite EXISTS 子句:SELECT column1, column2....columnN FROM table_name WHERE column_name EXISTS (SELECT * FROM table_name );SQLite EXPLAIN 语句:EXPLAIN INSERT statement...; or EXPLAIN QUERY PLAN SELECT statement...;SQLite GLOB 子句:SELECT column1, column2....columnN FROM table_name WHERE column_name GLOB { PATTERN };SQLite GROUP BY 子句:SELECT SUM(column_name) FROM table_name WHERE CONDITION GROUP BY column_name;SQLite HAVING 子句:SELECT SUM(column_name) FROM table_name WHERE CONDITION GROUP BY column_name HAVING (arithematic function condition);SQLite INSERT INTO 语句:INSERT INTO table_name( column1, column2....columnN) VALUES ( value1, value2....valueN);SQLite IN 子句:SELECT column1, column2....columnN FROM table_name WHERE column_name IN (val-1, val-2,...val-N);SQLite Like 子句:SELECT column1, column2....columnN FROM table_name WHERE column_name LIKE { PATTERN };SQLite NOT IN 子句:SELECT column1, column2....columnN FROM table_name WHERE column_name NOT IN (val-1, val-2,...val-N);SQLite ORDER BY 子句:SELECT column1, column2....columnN FROM table_name WHERE CONDITION ORDER BY column_name {ASC|DESC};SQLite PRAGMA 语句:PRAGMA pragma_name; For example: PRAGMA page_size; PRAGMA cache_size = 1024; PRAGMA table_info(table_name);SQLite RELEASE SAVEPOINT 语句:RELEASE savepoint_name;SQLite REINDEX 语句:REINDEX collation_name; REINDEX database_name.index_name; REINDEX database_name.table_name;SQLite ROLLBACK 语句:ROLLBACK; or ROLLBACK TO SAVEPOINT savepoint_name;SQLite SAVEPOINT 语句:SAVEPOINT savepoint_name;SQLite SELECT 语句:SELECT column1, column2....columnN FROM table_name;SQLite UPDATE 语句:UPDATE table_name SET column1 = value1, column2 = value2....columnN=valueN [ WHERE CONDITION ];SQLite VACUUM 语句:VACUUM;SQLite WHERE 子句:SELECT column1, column2....columnN FROM table_name WHERE CONDITION;