目录
SQLite命令
点命令
使用.help可以获取点命令的清单
| 命令 | 选项 | 描述 |
|---|---|---|
| .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 可以是下列之一:
|
| .nullvalue | STRING | 在 NULL 值的地方输出 STRING 字符串。 |
| .output | FILENAME | 发送输出到 FILENAME 文件。 |
| .output | stdout | 发送输出到屏幕。 |
| STRING... | 逐字地输出 STRING 字符串。 | |
| .prompt | MAIN CONTINUE | 替换标准提示符。 |
| .quit | 退出 SQLite 提示符。 | |
| .read | FILENAME | 执行 FILENAME 文件中的 SQL。 |
| .schema | ?TABLE? | 显示 CREATE 语句。 如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表。 |
| .separator | STRING | 改变输出模式和 .import 所使用的分隔符。 |
| .show | 显示各种设置的当前值。 | |
| .stats | ON|OFF | 开启或关闭统计。 |
| .tables | ?PATTERN? | 列出匹配 LIKE 模式的表的名称。 |
| .timeout | MS | 尝试打开锁定的表 MS 毫秒。 |
| .width | NUM NUM | 为 "column" 模式设置列宽度。 |
| .timer | ON|OFF | 开启或关闭 CPU 定时器。 |
sqlite> .databases
main: E:\myfile\python\pycharm\test\sqlite3.db
sqlite>
sqlite> .dump book
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE book(
id int primary key,
sort int,
name text,
price real,
category int,
foreign key (category) references category(id) on update cascade on delete cascade
);
INSERT INTO book VALUES(2,3,\'Python Intro\',17.5,2);
COMMIT;
sqlite>
格式化输出
sqlite>.header on
sqlite>.mode column
sqlite>.timer on
sqlite>
SQLite语法
| 语法 | 说明 |
|---|---|
| 大小写 | SQLite不区分大小写,但个别命令要区分,比如GLOB和glob是不相同的。 |
| 注释 |
|
| 语句 | 以关键字开始,以分号结束,常用关键字
|
数据类型
常用类型
SQLite中,每一列、每个变量、每个表达式都有相关的数据类型。
可以在创建表时使用这些数据类型。
| 存储类 | 描述 |
|---|---|
| NULL | 值是一个 NULL 值。 |
| INTEGER | 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。 |
| REAL | 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。 |
| TEXT | 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。 |
| BLOB | 值是一个 blob 数据,完全根据它的输入存储。 |
亲和(Affinity)类型
| 亲和类型 | 描述 |
|---|---|
| TEXT | |
| NUMERIC | |
| INTEGER | |
| REAL | |
| NONE |
亲和类型及类型名称
boolean数据类型
SQLite没有单独的 Boolean 存储类。相反,布尔值被存储为整数 0(false)和 1(true)。
Date与Time数据类型
SQLite 没有一个单独的用于存储日期和/或时间的存储类,但 SQLite 能够把日期和时间存储为 TEXT、REAL 或 INTEGER 值。
创建数据库
创建
PS E:\myfile\python\pycharm\test> sqlite3.exe test.db
SQLite version 3.27.2 2019-02-25 16:06:06
Enter ".help" for usage hints.
sqlite>
sqlite> .databases
main: E:\myfile\python\pycharm\test\test.db
导出
PS E:\myfile\python\pycharm\test> sqlite3 test.db .dump > test.db.sql
PS E:\myfile\python\pycharm\test> cat test.db.sql
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
COMMIT;
PS E:\myfile\python\pycharm\test>
还可以从.sql文件中恢复数据库
$sqlite3 test.db < test.db.sql #注,该命令在window下不成功,原因不明。
附加数据库
PS E:\myfile\python\pycharm\test> sqlite3 sqlite3.db
SQLite version 3.27.2 2019-02-25 16:06:06
Enter ".help" for usage hints.
sqlite>
sqlite> .database
main: E:\myfile\python\pycharm\test\sqlite3.db
sqlite>
sqlite> attach database \'test.db\' as \'test\';
sqlite>
sqlite> .database
main: E:\myfile\python\pycharm\test\sqlite3.db
test: E:\myfile\python\pycharm\test\test.db
sqlite>
注意,main和temp这两个名称是保留的,所以不能被attach
sqlite> attach database \'test.db\' as \'temp\';
Error: database temp is already in use
sqlite>
sqlite> attach database \'test.db\' as \'main\';
Error: database main is already in use
sqlite>
分离数据库
无法分离main和temp
如果是内存中的数据库或临时数据库,detach后对应数据库将会被摧毁,内容将会丢失。
sqlite>.databases
seq name file
--- --------------- ----------------------
0 main /home/sqlite/testDB.db
2 test /home/sqlite/testDB.db
3 currentDB /home/sqlite/testDB.db
sqlite>
sqlite> DETACH DATABASE \'currentDB\';
sqlite> .databases
seq name file
--- --------------- ----------------------
0 main /home/sqlite/testDB.db
2 test /home/sqlite/testDB.db