如何使用 SQLite ?

SQLite 是一个轻量级、嵌入式的关系型数据库管理系统(RDBMS)。它是一种 C 库,实现了自给自足、无服务器、零配置、事务性 SQL 数据库引擎。SQLite 的源代码是开放的,完全在公共领域。它被广泛用于各种应用程序,包括浏览器、操作系统、移动应用等。

SQLite 的基本特性

  1. 轻量级:SQLite 的库文件非常小,通常只有几百KB。
  2. 自包含:SQLite 不依赖于外部的服务器进程,所有的数据都存储在一个单一的文件中。
  3. 零配置:无需安装和配置,数据库可以直接使用。
  4. 事务性:SQLite 支持原子性、可一致性、隔离性和持久性(ACID)的事务。
  5. 跨平台:SQLite 可以在 Windows、Linux、macOS、iOS 和 Android 等多个平台上运行。
  6. 高效:对于大多数单用户应用和嵌入式系统,SQLite 提供了足够的性能。

SQLite 安装和配置

使用 SQLite 不需要复杂的安装和配置步骤。大多数现代的编程语言和开发环境都内置了 SQLite 支持。以下是一些常见环境中如何安装和使用 SQLite 的方法:

在 Python 中使用 SQLite

Python 标准库中包含了 SQLite 的支持,可以通过 sqlite3 模块直接使用。

import sqlite3# 创建数据库连接
conn = sqlite3.connect('example.db')# 创建游标对象
cursor = conn.cursor()# 创建表
cursor.execute('''CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')# 插入数据
cursor.execute('''INSERT INTO users (name, age) VALUES (?, ?)''', ('Alice', 25))
cursor.execute('''INSERT INTO users (name, age) VALUES (?, ?)''', ('Bob', 30))# 提交事务
conn.commit()# 查询数据
cursor.execute('''SELECT * FROM users''')
rows = cursor.fetchall()
for row in rows:print(row)# 关闭连接
conn.close()
在命令行中使用 SQLite

SQLite 提供了一个命令行工具,可以直接操作 SQLite 数据库。以下是一些常见的命令:

# 启动 SQLite 命令行工具
$ sqlite3 example.db# 创建表
sqlite> CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);# 插入数据
sqlite> INSERT INTO users (name, age) VALUES ('Alice', 25);
sqlite> INSERT INTO users (name, age) VALUES ('Bob', 30);# 查询数据
sqlite> SELECT * FROM users;
1|Alice|25
2|Bob|30# 退出命令行工具
sqlite> .exit

SQLite 的基本操作

创建数据库和表

在 SQLite 中,创建一个新的数据库实际上是创建一个新的文件。可以通过 sqlite3 工具或程序代码来创建数据库和表。

CREATE TABLE users (id INTEGER PRIMARY KEY,name TEXT NOT NULL,age INTEGER NOT NULL
);
插入数据

可以使用 INSERT INTO 语句向表中插入数据。

INSERT INTO users (name, age) VALUES ('Charlie', 22);
查询数据

可以使用 SELECT 语句从表中查询数据。

SELECT * FROM users;
更新数据

可以使用 UPDATE 语句更新表中的数据。

UPDATE users SET age = 26 WHERE name = 'Alice';
删除数据

可以使用 DELETE 语句删除表中的数据。

DELETE FROM users WHERE name = 'Bob';
使用索引

索引可以加速数据库的查询速度。可以使用 CREATE INDEX 语句创建索引。

CREATE INDEX idx_name ON users (name);

高级功能

事务

事务是一组操作的集合,这些操作要么全部执行,要么全部不执行。SQLite 支持事务,并且默认在每个独立的 INSERTUPDATEDELETE 操作后自动提交事务。可以手动管理事务以提高性能。

BEGIN TRANSACTION;
INSERT INTO users (name, age) VALUES ('Dave', 28);
UPDATE users SET age = 29 WHERE name = 'Charlie';
COMMIT;
视图

视图是基于查询结果的虚拟表。可以使用 CREATE VIEW 语句创建视图。

CREATE VIEW user_names AS
SELECT name FROM users;
触发器

触发器是在某些表操作(如 INSERTUPDATEDELETE)发生时自动执行的一段代码。可以使用 CREATE TRIGGER 语句创建触发器。

CREATE TRIGGER user_age_check
BEFORE INSERT ON users
FOR EACH ROW
WHEN NEW.age < 0
BEGINSELECT RAISE(FAIL, 'Age cannot be negative');
END;
外键约束

SQLite 支持外键约束,从而确保数据的完整性。可以在创建表时定义外键约束。

CREATE TABLE orders (id INTEGER PRIMARY KEY,user_id INTEGER,product TEXT,FOREIGN KEY (user_id) REFERENCES users (id)
);

性能优化

使用事务

将多个操作放在一个事务中可以显著提高性能。默认情况下,每个 INSERTUPDATEDELETE 操作后 SQLite 都会自动提交事务,这会导致大量的磁盘写入操作。可以通过手动管理事务来减少这种开销。

conn = sqlite3.connect('example.db')
cursor = conn.cursor()# 开始事务
conn.execute('BEGIN TRANSACTION')for i in range(1000):cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('User'+str(i), 20+i))# 提交事务
conn.commit()
conn.close()
使用适当的数据类型

尽量使用合适的数据类型来存储数据,可以减少存储空间并提高查询性能。例如,使用 INTEGER 来存储数字,而不是使用 TEXT

创建索引

为常用的查询字段创建索引,可以显著提高查询速度。但是,索引也会增加插入和更新操作的开销,因此应根据实际情况平衡利弊。

SQLite 的常见应用场景

嵌入式系统

由于其轻量级和自包含的特性,SQLite 非常适合嵌入式系统和设备。例如,在智能手机、电视和车载系统中,SQLite 经常被用作本地数据存储解决方案。

单用户应用程序

对于单用户应用程序,如桌面软件或移动应用,SQLite 是一个理想的选择。它不需要服务器进程,部署简单,并且提供足够的性能和功能。

测试和开发

在开发和测试阶段,SQLite 可以用作快速原型设计和测试的小型数据库。由于其零配置特性,开发者可以轻松地创建和管理数据库。

分布式数据库系统的缓存或中转存储

在一些分布式数据库系统中,SQLite 可以用作缓存层或中转存储,从而减少对主数据库的压力,并提高系统的整体性能。

SQLite 的限制

尽管 SQLite 具有许多优点,但在某些场景中也存在一些限制:

  1. 并发访问:SQLite 对并发写入操作支持有限,适合单用户或低并发场景。
  2. 存储容量:SQLite 的单个数据库文件最大为 140TB,但实际应用中,由于性能和管理上的考虑,适合较小的数据集。
  3. 功能:虽然 SQLite 支持大多数标准 SQL 功能,但不支持某些高级特性,如存储过程、用户定义函数(UDF)和某些类型的复杂查询。

SQLite 是一个强大且灵活的嵌入式数据库解决方案,适用于多种应用场景。从基本的数据库操作到高级功能,如事务、视图和触发器,SQLite 提供了一个完整的 SQL 数据库引擎,并且易于使用和集成。尽管存在一些限制,但对于大多数嵌入式和单用户应用来说,SQLite 是一个理想的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/385611.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于 OSPF 序列号范围 0x80000001-0x7FFFFFFF 正本清源

注&#xff1a;机翻&#xff0c;未校对。 正本&#xff1a;RFC 2328 OSPF Version 2 中相关解释 April 1998 12.1.6. LS sequence number 12.1.6. 序列号 The sequence number field is a signed 32-bit integer. It is used to detect old and duplicate LSAs. The space …

【OSS对象存储】Springboot集成阿里云OSS + 私有化部署Minio

【OSS对象存储】Springboot集成阿里云OSS 私有化部署Minio 一、摘要二、POM依赖三、配置文件四、表结构设计五、代码实现5.1 代码包结构5.2 API封装5.3 增删改查 六、扩展6.1 Minio配置https访问 一、摘要 掌握阿里云OSS、私有化部署Minio两种对象存储的使用方式运用工厂策略…

【C++指南】内存管理(上)

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注

vue上传Excel文件并直接点击文件列表进行预览

本文主要内容&#xff1a;用elementui的Upload 组件上传Excel文件&#xff0c;上传后的列表采用xlsx插件实现点击预览表格内容效果。 在项目中可能会有这样的需求&#xff0c;有很多种方法实现。但是不想要跳转外部地址&#xff0c;所以用了xlsx插件来解析表格&#xff0c;并展…

总结一些vue3小知识3

总结一些vue3小知识1&#xff1a;http://t.csdnimg.cn/C5vER 总结一些vue3小知识2&#xff1a;http://t.csdnimg.cn/sscid 1.限制时间选择器只能选择后面的日期 说明&#xff1a;disabled-date属性是一个用来判断该日期是否被禁用的函数&#xff0c;接受一个 Date 对象作为参…

科普文:分布式架构中的三高:高并发、高性能、高可用

关于高并发 高并发场景 互联网应用以及云计算的普及&#xff0c;使得架构设计和软件技术的关注点从如何实现复杂的业务逻 辑&#xff0c;转变为如何满足大量用户的高并发访问请求。 一个简单的计算处理过程&#xff0c;如果一旦面对大量的用户访问&#xff0c;整个技术挑战就…

DP 整数拆分不同的二叉搜索树 DAY21

整数拆分&#xff1f; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。示例 2: 输入: n 10 输…

实验2-2-1 温度转换

#include<stdio.h> #include <math.h> int main(){int c,f150;c5*(f-32)/9;printf("fahr 150, celsius %d",c); }

sqlilabs解题方法

Lass1 查询id为1的用户名和密码 查询id为2的用户名和密码 没有回显&#xff0c;不含id-1的行 判断字段数&#xff0c;字段数为3 查询数据库用户名&#xff0c;和数据库名 查询时id必须超出数据库以外&#xff0c;一般用-1 用户名&#xff1a;user() 数据库名&#xff1a;databa…

redis:清除缓存的最简单命令示例

清除redis缓存命令(执行命令列表见截图) 1.打开cmd窗口&#xff0c;并cd进入redis所在目录 2.登录redis redis-cli 3.查询指定队列当前的记录数 llen 队列名称 4.清除指定队列所有记录 ltrim 队列名称 1 0 5.再次查询&#xff0c;确认队列的记录数是否已清除

opencascade AIS_Manipulator源码学习

前言 AIS_Manipulator 是 OpenCASCADE 库中的一个类&#xff0c;用于在3D空间中对其他交互对象或一组对象进行局部变换。该类提供了直观的操控方式&#xff0c;使用户可以通过鼠标进行平移、缩放和旋转等操作。 详细功能 交互对象类&#xff0c;通过鼠标操控另一个交互对象…

【Django】 读取excel文件并在前端以网页形式显示-安装使用Pandas

文章目录 安装pandas写views写urls安装openpyxl重新调试 安装pandas Pandas是一个基于NumPy的Python数据分析库&#xff0c;可以从各种文件格式如CSV、JSON、SQL、Excel等导入数据&#xff0c;并支持多种数据运算操作&#xff0c;如归并、再成形、选择等。 更换pip源 pip co…

在 Postman 中设置全局 token

目录 问题描述解决方案 问题描述 在使用 Postman 进行接口测试时&#xff0c;经常会遇到在 Header 中添加 token 的情况。当接口数量较多时&#xff0c;需要为每个接口进行设置&#xff0c;而且当 token 失效时需要重新获取并设置&#xff0c;这样一来效率较低。 解决方案 下…

MSPM0G3507学习笔记1:开发环境_引脚认识与点灯

今日速通一款Ti的单片机用于电赛&#xff1a;MSPM0G3507 这里默认已经安装好了Keil5_MDK 首先声明一下: 因为是速成&#xff0c;所以需要一定单片机学习基础&#xff0c;然后我写的也不会详细&#xff0c;这个专栏的笔记也就是自己能看懂就行的目标~~~ 文章提供测试代码解…

Matlab进阶绘图第65期—带分组折线段的柱状图

带分组折线段的柱状图是在原始柱状图的基础上&#xff0c;在每组柱状图位置处分别添加折线段&#xff0c;以进行对比或添加额外信息。 由于Matlab中未收录带分组折线段的柱状图的绘制函数&#xff0c;因此需要大家自行设法解决。 本文使用自制的BarwithGroupedLine小工具进行…

「Ant Design」Antd 中卡片如何完全不展示内容区域、按需展示内容区域、不展示标题

前言 下面是默认的 Antd 卡片&#xff0c;由以下区域组成 处理 Antd 的 Card 展示形式大致有下面三种 卡片完全不展示内容区域 const App () > (<Card title"Default size card" extra{<a href"#">More</a>} style{{ width: 300 }}b…

SSRF过滤攻击

SSRF绕过&#xff1a; 靶场地址&#xff1a;重庆橙子科技SSRF靶场 这个是毫无过滤的直接读取&#xff0c;但是一般网站会设置有对SSRF的过滤&#xff0c;比如将IP地址过滤。 下面是常用的绕过方式&#xff1a; 1.环回地址绕过 http://127.0.0.1/flag.php http://017700…

C++11新特性——智能指针——参考bibi《 原子之音》的视频以及ChatGpt

智能指针 一、内存泄露1.1 内存泄露常见原因1.2 如何避免内存泄露 二、实例Demo2.1 文件结构2.2 Dog.h2.3 Dog.cpp2.3 mian.cpp 三、独占式智能指针:unique _ptr3.1 创建方式3.1.1 ⭐从原始(裸)指针转换&#xff1a;3.1.2 ⭐⭐使用 new 关键字直接创建&#xff1a;3.1.3 ⭐⭐⭐…

如何录制电脑内部声音?全方位介绍电脑录音软件:8款在线录音!(2024重新整理)

如何录制电脑内部声音&#xff1f;不管是娱乐圈还是现实生活&#xff0c;【录音】这个功能的重要性不言而喻。而电脑录音已在影视配音、音视频剪辑、会议记录、在线教育等多个领域发光发热&#xff01; 本文将为您推荐8款电脑录音软件&#xff0c;并详细介绍电脑录音的多种方式…

electron 网页TodoList工具打包成win桌面应用exe

参考&#xff1a; electron安装&#xff08;支持win、mac、linux桌面应用&#xff09; https://blog.csdn.net/weixin_42357472/article/details/140643624 TodoList工具 https://blog.csdn.net/weixin_42357472/article/details/140618446 electron打包过程&#xff1a; 要将…