4.数据库文件可以在不同字节顺序的机器间自由的共享
5.支持数据库大小至2TB
6. 足够小, 大致13万行C代码, 4.43M
7. 比一些流行的数据库在大部分普通数据库操作要快
8. 简单, 轻松的API
9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定
10. 良好注释的源代码, 并且有着90%以上的测试覆盖率
11. 独立: 没有额外依赖
12. 源码完全的开源, 你可以用于任何用途, 包括出售它
13. 支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python,Ruby等
与关系数据库进行交互的标准 SQLite 命令类似于 SQL。命令包括 CREATE、SELECT、INSERT、UPDATE、DELETE 和 DROP。这些命令基于它们的操作性质可分为以下几种:
命令 | 描述 |
---|---|
CREATE | 创建一个新的表,一个表的视图,或者数据库中的其他对象。 |
ALTER | 修改数据库中的某个已有的数据库对象,比如一个表。 |
DROP | 删除整个表,或者表的视图,或者数据库中的其他对象。 |
命令 | 描述 |
---|---|
INSERT | 创建一条记录。 |
UPDATE | 修改记录。 |
DELETE | 删除记录。 |
命令 | 描述 |
---|---|
SELECT | 从一个或多个表中检索某些记录。 |
SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它支持的SQL包括:
ATTACH DATABASE
BEGIN TRANSACTION
comment
COMMIT TRANSACTION
COPY
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
DELETE
DETACH DATABASE
DROP INDEX
DROP TABLE
DROP TRIGGER
DROP VIEW
END TRANSACTION
EXPLAIN
expression
INSERT
ON CONFLICT clause
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE
SQLite是无类型的. 这意味着你可以保存任何类型的数据到你所想要保存的任何表的任何列中, 无论这列声明的数据类型是什么(只有在一种情况下不是, 稍后解释). 对于SQLite来说对字段不指定类型是完全有效的. 如:
Create Table ex1(a, b, c);
诚然SQLite允许忽略数据类型, 但是仍然建议在你的Create Table语句中指定数据类型. 因为数据类型对于你和其他的程序员交流, 或者你准备换掉你的数据库引擎时能起到一个提示或帮助的作用.
SQLite支持常见的数据类型, 如:
CREATE TABLE ex2
a VARCHAR(10),
b NVARCHAR(15),
c TEXT,
d INTEGER,
e FLOAT,
f BOOLEAN,
g CLOB,
h BLOB,
i TIMESTAMP,
j NUMERIC(10,5)
k VARYING CHARACTER (24),
l NATIONAL VARYING CHARACTER(16)
前面提到在某种情况下, SQLite的字段并不是无类型的. 即在字段类型为”Integer Primary Key”时.
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
...
)
database, err := sql.Open("sqlite3", "./alpha.db")
stmt, _ := database.Prepare("create table if not exists user(id integer primary key, firstname text, lastname text)")
stmt.Exec()
stmt, _ = database.Prepare("insert into user( firstname, lastname) values(?,?)")
stmt.Exec("Jack", "Chen")
var id int
var firstname string
var lastname string
rows, err := database.Query("select id, firstname, lastname from user")
if nil != err {
fmt.Println(err)
}
for rows.Next() {
rows.Scan(&id, &firstname, &lastname)
fmt.Println(strconv.Itoa(id) + ": " + firstname + " " + lastname)
}
源码:
package sqlite
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"strconv"
"time"
)
func SQLiteDemo() {
var start = time.Now().UnixMicro()
database, err := sql.Open("sqlite3", fmt.Sprintf("./alpha%d.db", start))
if nil != err {
fmt.Println(err)
}
stmt, _ := database.Prepare("create table if not exists user(id integer primary key, firstname text, lastname text)")
stmt.Exec()
stmt, _ = database.Prepare("insert into user( firstname, lastname) values(?,?)")
stmt.Exec("Jack", "Chen")
var id int
var firstname string
var lastname string
rows, err := database.Query("select id, firstname, lastname from user")
if nil != err {
fmt.Println(err)
}
for rows.Next() {
rows.Scan(&id, &firstname, &lastname)
fmt.Println(strconv.Itoa(id) + ": " + firstname + " " + lastname)
}
var end = time.Now().UnixMicro()
fmt.Printf("SQLiteDemo: %d\n", end-start)
}
// main
package main
import (
"go_basics/sqlite"
)
func main() {
sqlite.SQLiteDemo()
}
磁盘文件模式, 一个简单的"建表-插入-查询"操作需要耗时 5467 μs.
1: Jack Chen
SQLiteDemo: 5467
可以看到,每个 SQLite DB 都有一个 root 表 : sqlite_master
select * from sqlite_master;
--output
type,name,tbl_name,rootpage,sql
table,user,user,2,"CREATE TABLE user(id integer primary key, firstname text, lastname text)"
SQLite 数据库通常存储在单个普通磁盘文件中。我们也可以使用内存模式。SQLite 数据库单纯的存在于内存中的最常用方法是使用特殊文件名 :memory:
打开数据库。换句话说,不是将真实磁盘文件的名称传递给 sqlite3_open()
函数,而是传入字符串:memory:
。 例如:
rc = sqlite3_open(":memory:",&db);
使用说明:
使用内存 SQLite 姿势: sql.Open("sqlite3", ":memory:")
, 代码如下:
database, err := sql.Open("sqlite3", ":memory:")
完整源代码:
func SQLiteInMemoryDemo() {
var start = time.Now().UnixMicro()
database, err := sql.Open("sqlite3", ":memory:")
if nil != err {
fmt.Println(err)
}
stmt, _ := database.Prepare("create table if not exists user(id integer primary key, firstname text, lastname text)")
stmt.Exec()
stmt, _ = database.Prepare("insert into user( firstname, lastname) values(?,?)")
stmt.Exec("Jack", "Chen")
var id int
var firstname string
var lastname string
rows, err := database.Query("select id, firstname, lastname from user")
if nil != err {
fmt.Println(err)
}
for rows.Next() {
rows.Scan(&id, &firstname, &lastname)
fmt.Println(strconv.Itoa(id) + ": " + firstname + " " + lastname)
}
var end = time.Now().UnixMicro()
fmt.Printf("SQLiteInMemoryDemo: %d", end-start)
}
// main
package main
import (
"fmt"
"go_basics/sqlite"
)
func main() {
sqlite.SQLiteDemo()
sqlite.SQLiteInMemoryDemo()
}
性能耗时: 434 μs (是磁盘模式的 10 倍+)
1: Jack Chen
SQLiteInMemoryDemo: 434
SQLite拥有一个精致的、模块化的体系结构,并引进了一些独特的方法进行关系型数据库的管理。它由被组织在3个子系统中的8个独立的模块组成,如图1-2所示。这个模型将查询过程划分为几个不连续的任务,就像在流水线上工作一样。在体系结构栈的顶部编译查询语句,在中部执行它,在底部处理操作系统的存储和接口。
https://www.youtube.com/watch?v=gpxnbly9bz4 https://blog.csdn.net/cunjie3951/article/details/106917999
汽车内饰关键词大全怎么提高电影关键词排名淘宝关键词提高热度怎么制作关键词查询链接下周股市关键词是什么智能计划关键词优化方法2021思维导图关键词拼多多批量设置关键词90后战士的关键词地球脉动关键词是什么仪容仪表关键词是什么济宁提高关键词排名方法美学思维的关键词是关键词排名广告有哪些如何匹配搜索关键词排名中考政治关键词答题大全推衣服怎么写关键词外文期刊有关键词吗公众号如何关键词优化汽车饰品关键词大全临潼关键词优化推广简单的关键词唤醒算法荔湾seo优化关键词费用关键词搜索不到直播号搜索如何修改关键词排名保定关键词优化找哪家同时查找多个文档关键词360关键词排名推广优化什么网站可以检索关键词日本GV搜什么关键词关键词优化营销团队口号外贸怎样写关键词寂寞圣哲老子篇关键词南阳关键词优化服务足球关键词a到z陕西关键词扩展工具天津关键词优化公司排名汕头关键词排名企业形容T恤的关键词关键词规划师黑马沧州产品关键词网站优化漯河关键词优化公司电话情人节关键词2022论文可以不加关键词吗行业研究关键词有哪些淘宝关键词重复删除了亚马逊关键词手动推排名国际站关键词指数查询黄山关键词优化如何选择三里人家关键词前奏关键词吉他谱研修所获关键词有哪些搜不到的关键词排名自行车关键词标题网络违法违规关键词查询关键词挖掘商机怎么写直通车关键词 标题屠呦呦的礼物关键词外贸平台关键词为何收费论文关键词理论研究如何避开关键词检索提升本领是关键词吗汽车网站的关键词初三数学关键词总结小米企业的关键词优化亚马逊关键词间相互带动淘宝关键词哪里查看详情正规seo优化关键词收录怎样制作关键词图表视频什么是新闻的关键词关键词伴奏歌谱下载关键词提取的评价指标北京关键词小程序开发共同富裕摘要关键词晨练的关键词有哪些亚马逊如何修改否定关键词知网2.0关键词检索颐和园里面的关键词孝感关键词推广哪家好些冬天男裤子关键词图片关键词属于文献特征的食品推广关键词有哪些宜昌专业关键词排名外包女装关键词搜索技巧论文论文关键词要倾斜吗人群关键词都有哪些英语优化关键词电话号码深圳企业关键词优化公司黄山关键词推广如何选比较常见的关键词有热门关键词优化在线排名黄山关键词推广如何选重庆关键词优化网站推广网易云怎么买关键词风格素材关键词有哪些泉山seo优化关键词淘宝商品怎么创建关键词珠海优化关键词点击量领取美大选关键词头条标题关键词有哪些拼多多怎样显示关键词游戏的工具价值关键词英语作文标题的关键词新乡关键词优化售价关键词的选择应注意苏州优化关键词排名推广科普领域关键词是什么成长我的2021关键词保洁关键词排名查询网站公众号刷关键词软件测测cp的关键词2018年关键词回顾宁波关键词优化免费咨询好的关键词排名电话沟通礼貌关键词有哪些命名空间引用关键词是唐山关键词优化选哪家河神电视剧关键词咸鱼关键词排名怎么查淘宝关键词搜索最新调整亚马逊看别人的关键词店铺关键词写什么好宁波关键词优化怎样收费什么叫品牌的关键词如何查询关键词被收录南宋临安城的关键词宁波怎么提高关键词排名深圳企业关键词优化排名窑洞对话的关键词是搜索关键词越少越好吗静态属性的关键词java民法典网络关键词佛山校园关键词优化公司流量最高的关键词排名内容创意的核心关键词创业开店关键词是什么江苏专业关键词seo优化天津关键词排名推广公司兴化关键词网站优化公司关键词伴奏歌谱下载沧州孟村网站关键词排名制定专属年度关键词书签宿迁关键词排名稳定提升页码怎么添加关键词符号厦门优化搜索关键词排名项城seo关键词优化软件关键词出价是指什么网上买东西搜索关键词徐州关键词优化实力强深圳关键词网络推广价格海明威个人介绍的关键词提炼关键词应注意哪些深圳关键词推广优化方案内审四个关键词格格关键词完整版仪器分析药物的关键词2022年教师成长关键词校园霸凌舞蹈关键词关于肉饮食的关键词手机怎么优化关键词排序宜昌关键词优化的技巧代表非遗的关键词推广店铺关键词范文大全黄冈关键词优化推广公司头条搜索关键词怎么查礼物盒怎么搜关键词青海旅游长尾关键词举例官网怎么查看关键词八组关键词回顾党史淘宝首页关键词下拉选项闲鱼设置关键词提醒注射剂的关键词关键词怎么更改时间案例分析没有摘要关键词商品关键词搜索分析工具20高考作文关键词开网店如何编辑关键词建设领域网络舆情关键词春药怎么卖的关键词小象西娜电影关键词中国冬奥关键词有哪些精品福利长尾关键词挖掘汽车镀膜剂类似关键词如何知道热门搜索关键词北京关键词搜索推广代理nlp字典树关键词提取关键词优化怎么购买书新乡关键词优化售价猪哥小猫p站关键词快手热门关键词怎么开启沈阳正规关键词排名价格头条发文如何增加关键词吉利车关键词大全网站关键词优化收费情况泰州关键词排名价格低男士耳环关键词是什么ocpx开得好的关键词要么 要么是关键词吗我的年度关键词叙事淘宝关键词生成淘口令