• 设为首页
  • 点击收藏
  • 手机APP
    手机扫一扫下载
    华域联盟APP
  • 关注官方公众号
    微信扫一扫关注
    华域联盟公众号
hotWEB访问日志自动化剖析浅谈

1.概略最近经常需求剖析WEB访问日志,从中发现非法央求,然后做相应安全检查,为了便当,所以写了一个日志 详情

十分钟掌握SQLite操作

0
回复
120
查看
[复制链接]
发表于 2018-1-20 17:06:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
  最近用Ruby写了一个七牛的demo参赛作品,使用了sqlite3,用到很多操作,利用假期的时间,简单做一个快速掌握SQLite命令的小入门。
7 b% V+ w' g7 A: _          SQLite是一个开放源代码的数据库引擎,具有独立,无服务器依赖,零配置,支持事务等特点。SQLite一直以轻量级为特点,在移动和嵌入式设备上使用广泛,官方称其是世界上部署最广泛的数据库引擎。
6 z: P9 o7 p( {4 z) s        20160109180838395496.PNG 5 j6 w& W- h2 F  ^
          本文主要侧重部分常用操作命令的介绍。试图以最简单的示例来展示如何操作。' n6 ^' U4 o, x# ~( \9 B8 `
         强大的命令集2 D( y* E2 y" n# R4 u! t3 F
' V( e0 A. f) E
          首先我们看一下sqlite3提供了哪些强大的命令。
  1. sqlite> .help
  2. .backup ?DB? FILE Backup DB (default "main") to FILE
  3. .bail ON|OFF Stop after hitting an error. Default OFF
  4. .databases List names and files of attached databases
  5. .dump ?TABLE? ... Dump the database in an SQL text format If TABLE specified, only dump tables matching LIKE pattern TABLE.
  6. .echo ON|OFF Turn command echo on or off
  7. .exit Exit this program
  8. .explain ?ON|OFF? Turn output mode suitable for EXPLAIN on or off. With no args, it turns EXPLAIN on.
  9. .header(s) ON|OFF Turn display of headers on or off
  10. .help Show this message
  11. .import FILE TABLE Import data from FILE into TABLE
  12. .indices ?TABLE? Show names of all indices If TABLE specified, only show indices for tables matching LIKE pattern TABLE.
  13. .load FILE ?ENTRY? Load an extension library
  14. .log FILE|off Turn logging on or off. FILE can be stderr/stdout
  15. .mode MODE ?TABLE? Set output mode where MODE is one of: csv Comma-separated values column Left-aligned columns. (See .width) html HTML <table> code insert SQL insert statements for TABLE line One value per line list Values delimited by .separator string tabs Tab-separated values tcl TCL list elements
  16. .nullvalue STRING Print STRING in place of NULL values
  17. .output FILENAME Send output to FILENAME
  18. .output stdout Send output to the screen
  19. .prompt MAIN CONTINUE Replace the standard prompts
  20. .quit Exit this program
  21. .read FILENAME Execute SQL in FILENAME
  22. .restore ?DB? FILE Restore content of DB (default "main") from FILE
  23. .schema ?TABLE? Show the CREATE statements If TABLE specified, only show tables matching LIKE pattern TABLE.
  24. .separator STRING Change separator used by output mode and .import
  25. .show Show the current values for various settings
  26. .stats ON|OFF Turn stats on or off
  27. .tables ?TABLE? List names of tables If TABLE specified, only list tables matching LIKE pattern TABLE.
  28. .timeout MS Try opening locked tables for MS milliseconds
  29. .vfsname ?AUX? Print the name of the VFS stack
  30. .width NUM1 NUM2 ... Set column widths for "column" mode
  31. .timer ON|OFF Turn the CPU timer measurement on or off
  32. sqlite>
复制代码
         以”.“开始的命令规则
1 d, J, T6 Z8 u; [
1 ^5 m, k: Q' q& p4 l( s+ c          看到了上面的全部命令,可以观察到,所有的命令都是以”.“开始的。而常用的SQL语句是格式自由的,并且可以跨越多行,空白字符(whitespace)和注释可以出现在任何地方。而SQLite中以.开始的命令有更多的限制,具体如下
; }/ c( N/ \$ C
            1 D/ A3 s& l/ C# _+ M7 B' V9 r) ^
  •         所有命令以 . 开始,并且 . 的左侧不包含任何空白字符       
    - @. c. e& e4 Q5 t2 S! ~/ a
  •         所有命令必须全部包含在一行输入行中       
    7 K6 L- }* l. n0 v+ j7 c' o
  •         所有命令不能出现在SQL语句之中        : i1 o( c3 Q9 {; R; N
  •         命令不识别注释5 r( D$ ^2 b% y* a/ ?3 q
         常用操作
* Z- P8 a7 ]  @  n' Z  @
0 b1 B$ r5 E0 {$ z8 T9 P6 D          创建一个数据库文件
2 G1 K& X" s1 P& x
  1. #找一个不存在的文件
  2. 09:35:16-androidyue/tmp$ cat test.db
  3. cat: test.db: No such file or directory
  4. #使用sqlite3 想要创建的数据库文件
  5. 09:35:28-androidyue/tmp$ sqlite3 test.db
  6. #进入sqlite,执行建表语句
  7. sqlite> CREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT);
  8. #退出SQLite
  9. sqlite> .exit
  10. #查看指定的文件,创建成功
  11. 09:42:26-androidyue/tmp$ cat test.db
  12. 09:44:45-androidyue/tmp$ dedqn_uploadedCREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT)
复制代码
          打开已存在的数据库文件
4 ]/ t8 n9 \- [" K6 O% e1 r
  1. 22:56:15-androidyue~ $ sqlite3 database_file.db
复制代码
          查看数据库0 o7 R0 e( ~1 \( ?
  1. sqlite> .databases
  2. seq name file
  3. --- --------------- ----------------------------------------------------------
  4. 0 main /home/androidyue/qiniu/.qiniu.db
  5. 1 temp
复制代码
          查看数据表
8 w0 q4 x5 H+ X
  1. sqlite> .tables
  2. qn_uploaded
复制代码
          查看建表语句
0 f2 w6 z# V! p7 m
  1. sqlite> .schema qn_uploaded
  2. CREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT);
复制代码
          显示字段名称6 L3 z6 N9 G" U
  1. #没有开启
  2. sqlite> select * from qn_uploaded;
  3. /home/androidyue/Documents/octopress/public//images/email.png|droidyue|1410096518.43964
  4. #开启之后
  5. sqlite> .header on
  6. sqlite> select * from qn_uploaded;
  7. filePath|bucket|lastModified
  8. /home/androidyue/Documents/octopress/public//images/email.png|droidyue|1410096518.43964
复制代码
          导出数据表结构和数据(文本形式)- t: |5 e  ]9 ^0 s8 [
  1. sqlite> .dump qn_uploaded
  2. PRAGMA foreign_keys=OFF;
  3. BEGIN TRANSACTION;
  4. CREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT);
  5. INSERT INTO "qn_uploaded" VALUES(&#39;/home/androidyue/Documents/octopress/public/images/dotted-border.png&#39;,&#39;droidyue&#39;,1410096552.54864);
  6. COMMIT;
复制代码
         调整输出$ v# N% x  s0 s9 @
- @, j, L* L6 P5 g7 V. X
          sqlite3程序可以使用八种不同的格式显示结果。 这些格式是”csv”, “column”, “html”, “insert”, “line”, “list”, “tabs”, and “tcl”. 你可以使用.mode命令来进行切换输出格式
( F: ?5 B1 ?' Q7 f          默认的输出模式list,使用了list模式,每条查询结果记录都会输出到一行,每一列使用一个分割符分割,默认的分割符是 “|“,list模式有一个常用的使用情况,就是当你想对查询结果记性额外处理(比如AWK处理)时,会事半功倍。
. H' Q. m+ v% {% Q( F5 G6 h1 I          列表模式输出3 L; M' `; b% {! @' y" F7 b& v
  1. sqlite> select * from qn_uploaded;
  2. /home/androidyue/Documents/octopress/public//images/email.png|droidyue|1410096518.43964
复制代码
          修改列表模式分割符# X! O9 H1 `) s( P3 Y2 k# I
  1. sqlite> .separator ", "
  2. sqlite> select * from qn_uploaded;
  3. /home/androidyue/Documents/octopress/public//images/email.png, droidyue, 1410096518.43964
复制代码
          使用Line模式4 {0 c4 K8 D6 `% ~5 v

0 j7 W6 `3 x, ^; [* J4 c* w: r          每行的输出格式为 字段名 = 字段值
  1. #找一个不存在的文件
  2. 09:35:16-androidyue/tmp$ cat test.db
  3. cat: test.db: No such file or directory
  4. #使用sqlite3 想要创建的数据库文件
  5. 09:35:28-androidyue/tmp$ sqlite3 test.db
  6. #进入sqlite,执行建表语句
  7. sqlite> CREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT);
  8. #退出SQLite
  9. sqlite> .exit
  10. #查看指定的文件,创建成功
  11. 09:42:26-androidyue/tmp$ cat test.db
  12. 09:44:45-androidyue/tmp$ dedqn_uploadedCREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT)
  13. 0
复制代码
          使用列模式
1 A3 E2 _+ O' ?' \4 r
  1. #找一个不存在的文件
  2. 09:35:16-androidyue/tmp$ cat test.db
  3. cat: test.db: No such file or directory
  4. #使用sqlite3 想要创建的数据库文件
  5. 09:35:28-androidyue/tmp$ sqlite3 test.db
  6. #进入sqlite,执行建表语句
  7. sqlite> CREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT);
  8. #退出SQLite
  9. sqlite> .exit
  10. #查看指定的文件,创建成功
  11. 09:42:26-androidyue/tmp$ cat test.db
  12. 09:44:45-androidyue/tmp$ dedqn_uploadedCREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT)
  13. 1
复制代码
         输出内容
& U' O, E6 A* j! K$ \+ b2 }" H! p' G$ o- C( f% m; }
          输出结果
0 |- ^/ u% `* `; u& O9 s- J( x1 B8 w! f
: [# v1 w0 N  }          默认情况下,所有的查询结果都是都是作为标准的输出展示。使用.output可以将输出结果定向到文件中。
  1. #找一个不存在的文件
  2. 09:35:16-androidyue/tmp$ cat test.db
  3. cat: test.db: No such file or directory
  4. #使用sqlite3 想要创建的数据库文件
  5. 09:35:28-androidyue/tmp$ sqlite3 test.db
  6. #进入sqlite,执行建表语句
  7. sqlite> CREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT);
  8. #退出SQLite
  9. sqlite> .exit
  10. #查看指定的文件,创建成功
  11. 09:42:26-androidyue/tmp$ cat test.db
  12. 09:44:45-androidyue/tmp$ dedqn_uploadedCREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT)
  13. 2
复制代码
         备份和恢复  R6 e$ K8 g) a  ^" t1 m

& h+ D* M% |$ s  u) i' w* m          备份
. P5 B) M9 j' g
  1. #找一个不存在的文件
  2. 09:35:16-androidyue/tmp$ cat test.db
  3. cat: test.db: No such file or directory
  4. #使用sqlite3 想要创建的数据库文件
  5. 09:35:28-androidyue/tmp$ sqlite3 test.db
  6. #进入sqlite,执行建表语句
  7. sqlite> CREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT);
  8. #退出SQLite
  9. sqlite> .exit
  10. #查看指定的文件,创建成功
  11. 09:42:26-androidyue/tmp$ cat test.db
  12. 09:44:45-androidyue/tmp$ dedqn_uploadedCREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT)
  13. 3
复制代码
          恢复3 e% E0 b4 a, i: m: F# f; p
  1. #找一个不存在的文件
  2. 09:35:16-androidyue/tmp$ cat test.db
  3. cat: test.db: No such file or directory
  4. #使用sqlite3 想要创建的数据库文件
  5. 09:35:28-androidyue/tmp$ sqlite3 test.db
  6. #进入sqlite,执行建表语句
  7. sqlite> CREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT);
  8. #退出SQLite
  9. sqlite> .exit
  10. #查看指定的文件,创建成功
  11. 09:42:26-androidyue/tmp$ cat test.db
  12. 09:44:45-androidyue/tmp$ dedqn_uploadedCREATE TABLE qn_uploaded(filePath VARCHAR(255), bucket VARCHAR(63), lastModified FLOAT)
  13. 4
复制代码



上一篇:数据库性能优化之SQL语句优化
下一篇:MemCache超详细解读

扫描微信二维码

关注华域联盟公众号

随时了解更新最新资讯

在线客服(服务时间 9:00~18:00)

在线QQ客服

电邮:admin@cnhackhy.com

Powered by 华域联盟! © 2015-2019

备案号:蒙ICP备17000689号-2蒙公网安备 15062202000105号中国互联网举报中心 Free counters!