sqlite3 小记 


数据导入:

cat data.txt 
hello,world
hello,world

sqlite3 data.db 
create table log( key text , value text ) 
.separator ','
.import data.txt log 
.exit

数据导出:

.dump log_tb

SQL语句一起输出:

sqlite3 data.db 
.databases  #查看数据库
.tables    # 查看表列表 
.schema    # 查看建表语句
.show      # 查看配置

.echo on   # sql语句一起输出 

.read data.sql     # 执行sql脚本

.output  data.txt   #输出到文本 
.output  stdout     #标准输出

.dump ?TABLE?       #表备份 

.mode csv,column,html,insert  #输出模式 


跨数据库查询: 

场景:数据库A和数据库B的表之间有参照,需要跨数据库做查询操作...
方案:用SQLite解释器中的提供的 ATTACH[DATABASE] 
关键字完成数据库附加:
ATTACH DATABASE [Database
Path] AS [Alias];
- [Database Path] :
 i.绝对路径;
 ii.相对路径,即要附加的数据库与当前维持连接数据库的相对地址。
- [Alias] :
 附加数据库的别名。
查询:查询时加上[数据库别名]即可 : 

SELECT * FROM DB_ Alias.TABLE_Name WHERE ...; 
例子:现在维持连接的数据库称为A(可省略),其中表Ta中的字段id_b与位于路径"d:\B.db"的数据库(别名B)中Tb表字段id有参照,查询条件即"A.Ta.id_b
= B.Tb.id":
ATTACH DATABASE  "d:\B.db"  AS  "B" ;
SELECT * FROM  Ta
, B.Tb WHERE  Ta.id_b = B.Tb.id ;

PS . 如果维持连接的数据库A与要附加的数据库B( B.db )在同一路径下,附加语句可写为:
ATTACH DATABASE  "B.db"  AS  "B" ; 

分离数据库: 
DETACH DATABASE 'B' ; 
查询附加的数据库: 
.databases 
数据库备份
.backup ?DB? FILE 
.backup 'main'  bak.db  
数据库恢复
.restore ?DB? FILE


触发器:

sqlite> CREATE TRIGGER audit_log AFTER INSERT 
ON tb_data 
BEGIN
   INSERT INTO tb_log(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now'));
END;

CREATE  TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name 
ON table_name
BEGIN
 -- Trigger logic goes here....
END;

查询触发器:
sqlite> SELECT name FROM sqlite_master
WHERE type = 'trigger';

删除: 
sqlite> DROP TRIGGER trigger_name;


索引: 

CREATE INDEX index_name ON table_name;
唯一索引: 
CREATE INDEX index_name
on table_name (column_name);
组合:
CREATE INDEX index_name
on table_name (column1, column2);
查看: 
sqlite> .indices COMPANY
查看全部:
sqlite> SELECT * FROM sqlite_master WHERE type = 'index';

使用索引时,应重新考虑下列准则:索引不应该使用在较小的表上。
索引不应该使用在有频繁的大批量的更新或插入操作的表上。
索引不应该使用在含有大量的 NULL 值的列上。
索引不应该使用在频繁操作的列上。


你可能感兴趣的:(sqlite3 小记 )