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