目录
二、使用.output/.dump/.read 命令,通过脚本来 保存或创建 数据库表
一、基本操作命令(Linux)
1. sqlite3 数据库不用创建,系统命令行下直接执行"sqlite3 yangxt.db"则会进入到数据库,如果没有该数据库则自动创建;
2. sqlite3命令行下执行 .databases 可以查看数据库;.table 可以查看数据库表; .schema table_name 可以查看创建表的sql;
3. .separator STRING 改变 .output输出模式 和 .import 所使用的分隔符;.nullvalue STRING 在有NULL值的地方输出STRING;
4. .show 查看当前各种配置值; .timer ON|OFF 开启|关闭 定时器;.help 查看所有命令;
5. .backup 命令使用方法 还未作详细了解,待补充。。。。。。
二、使用.output/.dump/.read 命令,通过脚本来 保存或创建 数据库表
1. sqlite3命令行下执行 .output file_name.sql 将输出重定向到文件,文件名和后缀自定义则可;
2. 如果已有数据库,可以使用 .dump [table_name]将数据库表的创建导出到脚本;如果没有参数table_name则表示导出整个数据库;
# 使用.dump 命令将数据库yangxt.db导出(yangxt.db事先创建并插入了数据)
[root@localhost sqlite3_yxt]# sqlite3 yangxt.db
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .output create_yangxt_db.sql
sqlite> .dump # 导出整个数据库,目前只有一个表yangxt
sqlite> .exit
[root@localhost sqlite3_yxt]# cat create_yangxt_db.sql
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE yangxt(
ID INTEGER PRIMARY KEY,
SensorID INTEGER,
SiteNum INTEGER,
Time VARCHAR(12),
SensorParameter REAL
);
INSERT INTO "yangxt" VALUES(1,1,1,'200605011306',16.4);
INSERT INTO "yangxt" VALUES(2,1,1,'200605011206',18.9);
COMMIT;
[root@localhost sqlite3_yxt]#
3. 使用 .read fine_name.sql 可以执行文件里面的sql语句,通过脚本自动创建数据库;
# 使用 .read 命令执行sql脚本,创建数据库表
[root@localhost sqlite3_yxt]# sqlite3 yangxt.db
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .table
yangxt
sqlite> select * from yangxt;
1|1|1|200605011306|16.4
2|1|1|200605011206|18.9
sqlite> .header on # 显示表头
sqlite> .mode colum # 列左对齐
sqlite> .timer on # 开启定时器
sqlite> select * from yangxt;
ID SensorID SiteNum Time SensorParameter
---------- ---------- ---------- ------------ ---------------
1 1 1 200605011306 16.4
2 1 1 200605011206 18.9
CPU Time: user 0.000000 sys 0.000000
sqlite> drop table yangxt;
CPU Time: user 0.000000 sys 0.002000
sqlite> .table
sqlite> .read create_yangxt_db.sql
CPU Time: user 0.000000 sys 0.000000
CPU Time: user 0.000000 sys 0.000000
CPU Time: user 0.000000 sys 0.001000
CPU Time: user 0.000000 sys 0.000000
CPU Time: user 0.000000 sys 0.000000
CPU Time: user 0.000000 sys 0.000000
sqlite> .table
yangxt
sqlite> select * from yangxt;
ID SensorID SiteNum Time SensorParameter
---------- ---------- ---------- ------------ ---------------
1 1 1 200605011306 16.4
2 1 1 200605011206 18.9
CPU Time: user 0.000000 sys 0.000000
sqlite>
三、另一种使用 .dump 命令导出导入整个数据库 的例子
# 使用 .dump 导出整个数据库
[root@localhost sqlite3_yxt]# ls
create_yangxt_db.sql yangxt1.db yangxt.db yangxt_table.txt
[root@localhost sqlite3_yxt]# sqlite3 yangxt.db .dump > create_yangxt_table.sql # 导出数据库到create_yangxt_table.sql文件
[root@localhost sqlite3_yxt]# ls
create_yangxt_db.sql yangxt1.db yangxt_table.txt
create_yangxt_table.sql yangxt.db
[root@localhost sqlite3_yxt]# cat create_yangxt_table.sql
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE yangxt(
ID INTEGER PRIMARY KEY,
SensorID INTEGER,
SiteNum INTEGER,
Time VARCHAR(12),
SensorParameter REAL
);
INSERT INTO "yangxt" VALUES(1,1,1,'200605011306',16.4);
INSERT INTO "yangxt" VALUES(2,1,1,'200605011206',18.9);
COMMIT;
[root@localhost sqlite3_yxt]# rm -f yangxt.db
[root@localhost sqlite3_yxt]# ls
create_yangxt_db.sql create_yangxt_table.sql yangxt1.db yangxt_table.txt
[root@localhost sqlite3_yxt]# sqlite3 yangxt.db < create_yangxt_table.sql # 重新导入数据库
[root@localhost sqlite3_yxt]# ls
create_yangxt_db.sql yangxt1.db yangxt_table.txt
create_yangxt_table.sql yangxt.db
[root@localhost sqlite3_yxt]# sqlite3 yangxt.db
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .table
yangxt
sqlite> select * from yangxt;
1|1|1|200605011306|16.4
2|1|1|200605011206|18.9
sqlite>
四、使用 .import 导入数据库表的内容
# 使用 .import 命令导入数据到数据库表
[root@localhost sqlite3_yxt]# ls
create_yangxt_db.sql create_yangxt_table.sql yangxt1.db yangxt.db
[root@localhost sqlite3_yxt]# sqlite3 yangxt.db
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .table
yangxt
sqlite> select * from yangxt;
1|1|1|200605011306|16.4
2|1|1|200605011206|18.9
sqlite> .output yangxt_table.txt
sqlite> select * from yangxt; # 测试,先把yangxt表的数据导出到yangxt_table.txt文件
sqlite> .output stdout
sqlite> .exit
[root@localhost sqlite3_yxt]# ls
create_yangxt_db.sql yangxt1.db yangxt_table.txt
create_yangxt_table.sql yangxt.db
[root@localhost sqlite3_yxt]# cat yangxt_table.txt # 查看导出的yangxt表的数据内容
1|1|1|200605011306|16.4
2|1|1|200605011206|18.9
[root@localhost sqlite3_yxt]# sqlite3 yangxt.db
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .table
yangxt
sqlite> select * from yangxt;
1|1|1|200605011306|16.4
2|1|1|200605011206|18.9
sqlite> delete from yangxt; # 把yangxt表中原来的内容删除
sqlite> select * from yangxt; # 查询确认yangxt表中内容已经被删除
sqlite> .import yangxt_table.txt yangxt # 将上面导出到yangxt_table.txt文件的yangxt表内容重新导入到表
sqlite> select * from yangxt; # 导入表之后再次查询,数据内容和我们导入的内容一致
1|1|1|200605011306|16.4
2|1|1|200605011206|18.9
sqlite>
五、附加数据库 attach/detach
1. 作用:同时使用多个数据库(假如是DB1和DB2)的数据(比如DB1.table1 和 DB2.table1),SQLite提供了一种将外部数据库附加到当前数据库连接的机制——Attach DB;
2. 基本命令
ATTACH DATABASE 'DatabaseName' As Alias-Name;
ATTACH DATABASE Alias-Name;
这里面需要注意几个点:
(1)attach语句的第一个参数必须在单引号之内,且必须是相对于当前SQLite终端的完整路径文件名。
(2)attach语句的第二个参数可以用单引号,也可以不用。
(3)对于attach进来的数据库,是一个as后面的参数(附加数据库别名)作为ID,也就是说:如果想附加多个数据库,需要指定不同的别名,别名不可重复;同一个数据库可以多次附加,只要保证使用不同的别名即可。
3. 附加数据库的更新和同步机制
SQLite的Attach DB机制是一种非常宽松的机制,对于附加数据库,可以同步和被同步。你可以在直接连接DB2中更新数据库,数据会同步更新到附加连接,也即可以在附加连接(DB2作为附加数据库)中查看到更新内容,反之亦然。这种机制很强大和灵活,但也增加了风险性。自己创建2个数据库test1.db 和 test2.db,进行更新试验则可得出结论。
参见:SQLite实用武器库(4)附加数据库(Attach DB)
六、双方都