LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 790|回复: 0

SQLite3使用笔记

[复制链接]
发表于 2023-12-22 15:15:48 | 显示全部楼层 |阅读模式
popucui

SQLite是一个轻量级的基于文件的数据库,开发、测试和迁移都很方便。关于SQLite、MySQL和NoSQL的对比,看这里的一篇文章就够了。最近需要更新一个软件的数据库,之前也自学过一些,这次正好巩固运用一下。

安装

sqlite3的安装简单,共分两步,第一步去这里下载,第二步解压缩,就能用了。如果使用的是Mac OS X或者Linux,一般都自带的有。

语法

sqlite不区分大小写,所以DROP和drop效果一样,例外的情况要记住,有一些命令大小写意义不同,比如GLOB和glob。所以,尽管sqlite不区分大小写,不管是sqlite shell还是使用API,最好区分大小写。

注释分为两种,行注释’–’,块注释’/* comment out code here */’。

命令同样分为两种:点命令(dot command)和普通命令(statements)。区别在于,点命令以点号开头’.’,小写;而普通命令大写,通常以SELECT、UPDATE、DROP、DELETE以及ALTER等开头,以分号结尾’;’。

--点命令
.help --显示帮助
.show --显示设置参数当前值

        echo: off
         eqp: off
explain: auto
     headers: off
mode: list
   nullvalue: ""
output: stdout
colseparator: "|"
rowseparator: "\n"
       stats: off
       width:

--普通命令,注意它们都是以分号结尾,大写开头
CREATE TABLE browse_dgv(key, value);
DROP TABLE browse_dgv;

数据库操作

在命令行输入sqlite3,就会进入sqlite shell:

cuijie@popucui-mba:~/Downloads% sqlite3
SQLite version 3.13.0 2016-05-18 10:57:30
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .database --这时候输入.database,可以看到已经有一个数据库名叫main
seq  name             file
---  ---------------  ----------------------------------------------------------
0    main

要打开一个数据库,只需要.open test.db就行,注意test.db必须是真实合法的sqlite3 db文件。此外,另一种方式是在命令行输入sqlite3 test.db,这样进入sqlite shell之后,就有一个名为main的数据库,连接到test.db。

cuijie@popucui-mba:~/Downloads/% sqlite3 test.db
SQLite version 3.13.0 2016-05-18 10:57:30
Enter ".help" for usage hints.
sqlite> .database
seq  name             file
---  ---------------  ----------------------------------------------------------
0    main             /Users/cuijie/Downloads/test.db

有的时候,你可能需要在一个会话同时打开多个database,可以这样:

sqlite> ATTACH DATABASE 'test.db' as 'foo';
sqlite> .database
seq  name             file
---  ---------------  -------------------------------
0    main             /Users/cuijie/Downloads/test.db
2    foo              /Users/cuijie/Downloads/test.db
sqlite> DETACH DATABASE foo; --从DETACH这个名字,就能猜出来,它的作用和ATTACH相反
sqlite> .database
seq  name             file
---  ---------------  -------------------------------
0    main             /Users/cuijie/Downloads/test.db

数据表操作

有.database显示已打开的数据库,那么自然也有.table显示当前会话中数据库所包含的数据表。

sqlite> .table
dgv   foo1  foo2
sqlite> .open hg19_na331_20170122.db
sqlite> .table
browse_bac                   browse_omim_genes
browse_cytoband              browse_omim_phenotypes
browse_dgv                   browse_par
browse_fish                  browse_refseq
browse_genomicSegmentalDups  info
browse_ncRNA

此外,还可以新建,删除数据表:

CREATE TABLE browse_dgv(key, value); --注意,不指定数据类型的话,默认为TEXT,数据类型一直没提,其实有编程常识的容易理解,主要包含NUMERIC,VARCHAR等。
DROP TABLE browse_dgv;
ALTER TABLE browse_dgv RENAME TO old_dgv; --此处给数据表重命名,此外sqlite还支持对数据表添加新的列。
UPDATE info SET value  = '3.13.0' WHERE key='sqlite-app-version';
/* 以上数更新数据表,此外还支持DELETE INSERT等  */

导入导出数据

有很多时候,从文件导入数据,导入的文件类型可以是csv或tsv。这里以tsv(tab分割的文本文件)为例说明。

DROP TABLE browse_dgv;
CREATE TABLE browse_dgv(
  dgv_id varchar(255),
chr varchar(25),
start int,
stop int,
  varType varchar(255),
reference text,
  pubmedid int,
  method varchar(255),
sample int,
  gain int,
  loss int,
  TotalGLInv int,
  Frequency int
);
CREATE INDEX r_dgv on browse_dgv (chr,start,dgv_id);

.headers off --因为创建数据表时,表头已经定义好,为避免重复,这里关闭表头
.mode tabs --我的文件是tab分割,所以这里改成tabs
.import 'hg19_dgv_2016-05-15_v3.txt' browse_dgv

修改完数据表之后,需要导出数据库到文件:

.save  hg19_na331_20170122.db
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表