Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >5分钟快速了解SQLite

5分钟快速了解SQLite

作者头像
jeanron100
发布于 2024-01-22 10:47:57
发布于 2024-01-22 10:47:57
17700
代码可运行
举报
运行总次数:0
代码可运行

这是学习笔记的第 2480篇文章

我们总是听到Oracle、MySQLPostgreSQL数据库,似乎大家都没有回过神来,其实SQLite是全球用户最多的数据库产品,只是没有太在意而已,比如我们使用的微信里面也有SQLite的身影,Python里面也默认安装了sqlite,Django默认调用的就是sqlite驱动,就连数据库领域内也有很多默认安装的存在形式,比如ProxySQL的档案库也是默认基于SQLite存储。

这样一个看起来无处不在的数据库,没有引起大家的注意,我一直在设想这可能是一个玩具数据库,只能存储一些简单的数据等等。 但是至少对于我来说,其实远远忽略了它的潜力,它在嵌入式领域还是很普遍的,对于资源的使用率极低,能从各种数据库中杀出重围真是不易。

任何一个数据库产品的起源似乎都带有一些偶然性,也带有一丝宿命。

SQLite 诞生的契机就是典型的程序员开发的故事剧本。作者 Richard 最开始在一艘军舰上做外包。他们的程序跑在军舰安装的电脑上,电脑上装的是 informix。Richard 的工作就是把 informix 的数据拿出来进行计算然后展示到电脑屏幕上。难就难在 informix 不够稳定,经常崩溃连不上,部队里的长官可不懂什么底层技术原理,至少报错是从Richard的功能里面抛出来的,可见Richard受了不少夹板气。于是他决定自己从头写一个无需外部连接的数据库来解决这个问题,难得是他这么干了,而且坚持下来了。。。

直到Richard 把 SQLite 发布到网上,收到了好评。。。接下来的故事和 Linux 诞生有点类似了,好像都是傻人有傻福,你的目的性越强,功利性越强,越没戏。

目前SQLite最新版本是SQLite version 3.44.2,发布时间是2023-11-24, 我简单测试了一些功能,感觉SQL语法的支持蛮全的。我们来快速演示一下。

安装数据库

默认其实SQLite是Linux操作系统自带的,当然版本要低一些(SQLite version 3.7.17 2013-05-20)

如果需要安装最新版本,可以有多种方式,我使用的是源码安装,下载最新的安装包,编译即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget https://www.sqlite.org/2023/sqlite-autoconf-3440200.tar.gz --no-check-certificate
./configure --prefix=/usr/local/sqlite3
make
make install

创建数据库

创建数据库不需要create database这样的语句,你指定一个文件即可,默认就是main数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# /usr/local/sqlite3/bin/sqlite3 testdb.db 
SQLite version 3.44.2 2023-11-24 11:41:44
Enter ".help" for usage hints.
sqlite>

这样就默认你创建了一个数据库,当然还有另外两类操作需要说明下,比如给数据库起个别名或者绑定多个数据库,就可以使用attach命令。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sqlite> attach database 'testdb.db' as 'testdb';
sqlite> .databases
main: /data/sqlite3/sqlite_data/testdb.db r/w
testdb: /data/sqlite3/sqlite_data/testdb.db r/w

创建数据表

创建数据库给我带来了一些小惊喜,因为MySQL的语法竟然完全可以兼容,比如我创建了一张表,使用了主键,数据类型,都完全兼容,自增列的命名不大一样,是autoincrement,没有下引号。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sqlite>  CREATE TABLE COMPANY(
...>    ID INTEGER PRIMARY KEY   AUTOINCREMENT,
...>    NAME           TEXT      NOT NULL,
...>    AGE            INT       NOT NULL,
...>    ADDRESS        CHAR(50),
...>    SALARY         REAL
...> );

sqlite> INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
   ...> VALUES ( 'Paul', 32, 'California', 20000.00 );
sqlite> 
sqlite> INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)
   ...> VALUES ('Allen', 25, 'Texas', 15000.00 );
sqlite> select * from company;
ID  NAME   AGE  ADDRESS     SALARY 
--  -----  ---  ----------  -------
1   Paul   32   California  20000.0
2   Allen  25   Texas       15000.0

快速查看帮助

SQLite的帮助是比较简单的,通常初学者在第一次使用SQLite的时候都会有些抓狂,那就是无法退出数据库,无奈之下只能CTRL+D取消推出,其实exit,quit都是可以使用的,可以使用.help的命令来查看,其实可以看到SQLite的风格就是以 小数点 来作为引导的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sqlite> .help  #查看数据库基本命令的方法
sqlite> exit;
Parse error: near "exit": syntax error
  exit;
  ^--- error here
sqlite> quit;
Parse error: near "quit": syntax error
  quit;
  ^--- error here
sqlite> .exit   #正确退出数据库的姿势

顺着这个思路,其实可以看到新版本的一些特性内容,比如当前使用的内存才180KB左右。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sqlite> .stats
Memory Used:                         186088 (max 186176) bytes
Number of Outstanding Allocations:   262 (max 264)
Number of Pcache Overflow Bytes:     5136 (max 5136) bytes
Largest Allocation:                  87360 bytes

格式化命令行输出

如果使用命令行查看SQLite数据,默认的数据格式看起来有些不够友好,可以做一下格式化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sqlite> select * from testdata3;  ##显示效果比较单一
1|aa|2024-01-17 00:00:00

sqlite> .header on 
sqlite> .mode column
sqlite> .timer on 
sqlite> select * from testdata3 limit 2;   ##效果明显好一些
id  name  create_time        
--  ----  -------------------
1   aa    2024-01-17 00:00:00
Run Time: real 0.001 user 0.000091 sys 0.000046

SQL支持

SQLite支持标准化SQL语句,所以order by ,group by 等基础的SQL语法大部分都是兼容支持的,比如触发器,视图等高级特性也是支持的,目前我测试了下只有truncate table不支持。

查看执行计划的部分,SQLite的显示效果蛮清晰的。

还有glob语法,感觉和like是很相似的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sqlite> select * from company where address glob '*ali*';
ID  NAME  AGE  ADDRESS     SALARY 
--  ----  ---  ----------  -------
1   Paul  32   California  20000.0

Enjoy:)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SQLite 基础13
逻辑运算符 sqlite> SELECT * FROM COMPANY WHERE AGE <= 22 and SALARY >= 40000; id name age address salary ---------- ---------- ---------- ---------- ---------- 6 Kim 22 South-Hall 45000.0 sqlite
franket
2021/12/01
1440
SQLite 基础16
LIMIT sqlite> select * from company; id name age address salary ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas
franket
2021/12/01
1870
SQLite Order By
SQLite 的 ORDER BY 子句是用来基于一个或多个列按升序或降序顺序排列数据。
子润先生
2021/07/01
7260
20分钟掌握sqlite库的使用
sqlite库是一个轻量级的数据库引擎,功能齐全,广泛应用于客户端产品(如Chrome浏览器)。
gaigai
2019/09/16
1K0
20分钟掌握sqlite库的使用
SQLite 基础12
算术运算 sqlite> select 20+30; 20+30 = 50 sqlite> select 20-30; 20-30 = -10 sqlite> select 20*30; 20*30 = 600 sqlite> select 20/30; 20/30 = 0 sqlite> select 20%30; 20%30 = 20 sqlite> ---- 比较运算符 sqlite> .mode column sqlite> select * from company; id
franket
2021/12/01
1600
SQLite Group By
SQLite 的 GROUP BY 子句用于与 SELECT 语句一起使用,来对相同的数据进行分组。
子润先生
2021/07/01
9170
SQLite 命令
本章将向您讲解SQLite编程人员所使用的简单却有用的命令。这些命令被称为 SQLite的点命令,这些命令的不同之处在于它们不以分号;结束。
子润先生
2021/07/02
5750
SQLite Limit 子句
SQLite 引擎将返回从下一行开始直到给定的 OFFSET 为止的所有行,如下面的最后一个实例所示。
子润先生
2021/07/01
8120
SQLite Like 子句
SQLite 的 LIKE 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,LIKE 运算符将返回真(true),也就是 1。这里有两个通配符与 LIKE 运算符一起使用:
子润先生
2021/07/01
7390
SQLite Glob 子句
SQLite 的 GLOB 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,GLOB 运算符将返回真(true),也就是 1。与 LIKE 运算符不同的是,GLOB 是大小写敏感的,对于下面的通配符,它遵循 UNIX 的语法。
子润先生
2021/07/01
7250
SQLite Having 子句
WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。
子润先生
2021/07/01
4830
SQLite 基础14
位运算符 sqlite> .mode line sqlite> select 6|5; 6|5 = 7 sqlite> select 6&5; 6&5 = 4 sqlite> select (~6); (~6) = -7 sqlite> select (6 << 2 ); (6 << 2 ) = 24 sqlite> select (6 >>1); (6 >>1) = 3 sqlite> ---- 表达式 sqlite> SELECT ( 22 + 34 ) AS ADDITION; ADDIT
franket
2021/12/01
1850
学习SQLite之路(一)
  工作快一年了,接触的东西不是很多,学到的东西也不多。无意中看到公司的代码有一点关于sqlite3的(不是我这一层负责的代码),于是乎就学学试试。  参考: http://www.runoob.com/sqlite/sqlite-tutorial.html  20160612 更新 1,什么是SQLite? SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库。 2.SQLite的优势 不需要一个单独的服务器进程或操作的系统(无服务器
xcywt
2018/01/11
1.9K0
学习SQLite之路(一)
SQLite 基础11
再进行查询 sqlite> select * from company; id name age address salary ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas
franket
2021/12/01
2040
C++编程库与框架实战——SQLite3数据库引擎
SQLite是可以实现类似于关系型数据库中各种操作的事务性SQL数据库引擎,可以为应用程序提供存储于本地的嵌入式数据库,帮助应用程序实现轻量级的数据存储。
Coder-ZZ
2024/06/06
1.3K0
C++编程库与框架实战——SQLite3数据库引擎
SQLite 把表或列重命名为另一个名字的操作方式
您可以暂时把表或列重命名为另一个名字,这被称为别名。使用表别名是指在一个特定的 SQLite 语句中重命名表。重命名是临时的改变,在数据库中实际的表的名称不会改变。
用户9236362
2021/11/29
2.2K0
SQLite Distinct 关键字
SQLite的DISTINCT关键字与SELECT语句一起使用,来消除所有重复的记录,并只获取唯一一次记录。
子润先生
2021/07/01
4040
python中的SQLite操作
上一个博客讲了SQLite的安装及使用,今天我们用python来连接sqlite,从而建立一个与上次一样的表。
py3study
2020/01/08
7690
python中的SQLite操作
SQLite 创建数据库
SQLite 的sqlite3命令被用来创建新的SQLite数据库。您不需要任何特殊的权限即可创建一个数据。
子润先生
2021/07/02
1.1K0
python 标准库 sqlite3 介绍(二)
LIKE 运算符 匹配通配符查询: import sqlite3 conn = sqlite3.connect(":memory:") c = conn.cursor()#创建游标 #SQL 语句(包含SQL 关键字、表名、列名)大小写不敏感 #创建table employee c.execute('''CREATE TABLE employee (ID INTEGER PRIMARY KEY, name TEXT , age INTEGER, address TEXT, salary
用户6021899
2019/08/14
1.1K0
相关推荐
SQLite 基础13
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档