嵌入式sqlite3库的使用

想要学会一个东西,我们必须要学会问为什么,我先来,为什么要学习sqlite3数据库?

sqlite3库和MySQL库相比有哪些优缺点呢?那些地方适合去用sqlite3库而不适合使用MySQL库呢?带着这些问题你去看文章,你就惊奇的会发现并没有什么用,啊哈,是不是有种打人的冲动,切勿动手,文明社会。

1.我们先看第一问题什么是数据库(前面好像没问到,哦吼,你管不着)

数据库(Database)是按照数据结构来组织、存储和管理数据的集合。它可以被看作是一个仓库,用于存储各种类型的数据,并提供对这些数据的快速访问、检索和更新。

数据库通常由一个或多个数据表组成,每个数据表包含多个行和列,用来存储特定类型的数据。数据库管理系统(DBMS)是用来管理数据库的软件系统,它提供了对数据库的创建、查询、更新、删除等操作,同时还负责确保数据的完整性、安全性和一致性。

数据库的主要功能包括:

1. **数据存储:** 数据库用于持久化地存储大量数据,包括文本、数字、图像、音频等各种形式的数据。

2. **数据管理:** 数据库管理系统提供了对数据的管理功能,包括数据的插入、查询、更新和删除操作。

3. **数据安全:** 数据库系统提供了对数据的安全性控制,包括用户权限管理、数据加密、备份与恢复等功能,以确保数据不受损坏或泄露。

4. **数据一致性:** 数据库系统通过事务处理和 ACID 特性(原子性、一致性、隔离性、持久性)来确保数据的一致性,避免数据出现不一致的情况。

5. **数据查询:** 数据库支持使用结构化查询语言(SQL)等方式进行数据查询和分析,以便用户能够方便地从数据库中提取所需的信息。

常见的数据库类型包括关系型数据库(如MySQL、Oracle、SQL Server)、非关系型数据库(如MongoDB、Redis)、内存数据库(如SQLite)等,每种类型的数据库都有其适用的场景和特点。数据库在现代信息技术中扮演着至关重要的角色,被广泛应用于企业管理、互联网服务、科学研究等各个领域。

说人话呢,就是你将数据存入数据库,就像你的钱存入银行,会更加的安全,高效,能够快速查询余额,也能够存储更久的时间。啊哈,就这么说吧,人死钱还在,小伙伴们有没有花不完钱呢,我这个人唯一的有点就是热心肠。总之数据库存储信息,优点大于缺点,只要知道这点就完事了。

2.sqlite3数据库以及MySQL数据库的优缺点的对比以及应用场景(同为数据库管理,对此肯定没太大区别吧)

区别还是挺大滴。

### SQLite3:

**优点:**
1. **轻量级:** SQLite 是一种轻量级的嵌入式数据库,数据库文件可以直接存储在磁盘上,不需要独立的服务器进程。
2. **零配置:** SQLite 不需要配置或维护,非常适合用于小型应用或原型开发。
3. **易于使用:** SQLite 使用简单,支持标准的 SQL 查询语言。
4. **跨平台支持:** SQLite 可以在多个操作系统上运行,包括 Windows、Linux、iOS 和 Android 等。

**缺点:**
1. **性能受限:** 对于大规模数据或高并发环境(高并发是指系统在同一时间内接收并处理大量的并发请求,对于数据库而言,高并发意味着大量的并发读写操作),SQLite 的性能可能不如其他专业的数据库系统。
2. **功能限制:** SQLite 对于复杂的数据库操作和并发控制支持相对有限。

**适用场景:**
1. 移动应用开发:适用于移动应用中的本地存储需求。
2. 小型项目或原型开发:适用于小型项目或快速原型开发,不需要独立的数据库服务器。
3. 临时数据存储:适用于临时性的数据存储需求,如临时缓存或临时数据分析。

### MySQL:

**优点:**
1. **高性能:** MySQL 是一种专业的关系型数据库管理系统,对于大规模数据和高并发环境有着良好的性能表现。
2. **强大的功能:** MySQL 提供了丰富的功能和工具,支持复杂的查询、事务处理和数据安全控制。
3. **可扩展性:** MySQL 支持集群部署和水平扩展,能够满足不断增长的数据需求。

**缺点:**
1. **配置复杂:** MySQL 需要独立的服务器进程来运行,配置和维护相对复杂。
2. **资源消耗:** 相比较 SQLite,MySQL 在资源消耗方面更高。

**适用场景:**
1. Web 应用开发:广泛应用于 Web 开发中的数据存储和管理,适用于大型网站和应用。
2. 企业应用:适用于企业级应用程序,需要处理大量数据和复杂查询的情况。
3. 数据仓库:适用于数据仓库和数据分析等需求,支持大规模数据存储和处理。

所以知道我的题目为什么是“嵌入式sqlite3的使用”,不懂也没关系你只需要知道

SQLite3 适用于小型项目、移动应用等简单场景,而 MySQL 更适合于大型项目、企业级应用和需要高性能、复杂查询的场景。选择使用哪种数据库取决于项目需求、规模和复杂度等因素。很好,我们讲了这么多,是不是很想试上这么一试呢,不过不要着急,我们还需要两个.c和.h文件

在linux下我们可以直接用下面两行命令去下载sqlite3数据库

sudo apt-get install sqlite3
sudo apt-get install libsqlite3-dev 

还可以通过这行命令安装可视化界面

sudo apt-get install sqlitebrowser

至于Windows怎么安装。我相信聪明的你们一定可以找到正确安装方法的。

下面我们正式开始学习sqlite3数据库的学习。

1.首先介绍的是我们经常回去使用的一些SQL命令

指令	        说明
.help	        #数据库指令帮助手册
.quit	        #退出sqlite3
.database	    #显示当前打开的数据库文件
.tables	        #显示数据库中所有表名
.header on	    #启用表头
.mode column	#使用列显示模式
.schema         #<表名>	查看表的结构
.show	        #显示各种设置的当前值

2.我们要去了解它的数据类型

类型        说明
int            #普通整型
integer        #可增加自动增长约束的整型
real        #值是一个浮点值,存储为 8 字节的 IEEE 浮点数字
text        #值是一个文本字符串,使用UTF-8格式编码
char        #值是一个文本字符串,使用ASCII格式编码,不足部分使用空格填充
varchar        #值是一个文本字符串,使用ASCII格式编码,不足部分则截止
data        #值是一个时间文本字符串,使用ASCII格式编码
NULL        #值是一个 NULL 值

简单介绍结束了,我们来试一下呗,

3,创建数据库表

create table 表名(列名1 列1类型,列名2 列2类型,...); #创建数据库表语法

举例来说:

SQL命令大小写均可,我想很多人创建表格里面的东西是什么意思,不要着急,让我来现身说法一波


》数据库约束:
》   主键约束:primary key	唯一表示数据库表中的各行/记录
》   非空约束:not null             确保某列不能有 NULL 值
》   默认约束:default              当某列没有指定值时,为该列提供默认值。
》   唯一约束:unique               确保某列中的所有值是不同的。
》   条件约束:check                 确保某列中的所有值满足一定条件。
》   外键约束:foreign key       用来强制 两个表之间”存在”的关系 
》   自动增长:autoincrement 只能跟在integer 类型后面做主键自动增
》             需要与 references 连用并且开启外键功能
 
》    SQL语句以‘;’结束

4,插入数据

那我们想要插入一行数据应该怎么办呢

    insert into 表名 values(列值1,列值2,列值3);     

当然我们还可以通过表名和列名存入部分数据,

   insert into 表名(列名1,列名4) values(列值1,列值4);

5,输出数据表中的数据

写了这么久了,我们还没见过我们写入的数据是不是多少有点

select 列名1, 列名2, 列名n from 表名;      #显示当前数据库指定表的内容;
 
#注意:
#1、可以使用数据库指令打印表名     .header on
#2、可以使用数据库指令格式化输出    .mode column

6,修改数据库中的数据

啊哈,当我们不小心将数据写错的时候,那肯定是要修改的嘛,

#SQLite 的 update 用于修改表中已有的记录。
#可以使用带有 where子句的 update  查询来更新选定行,否则所有的行都会被更新
#语法:    
    update 表名 set 列名1=值1,列名2=值2,.. where 条件表达式;

7,删除数据库中的数据

当然,也是可以,可不能行动昂,

#SQLite的delete用于删除表中已有的记录。
#可以使用带有where子句的delete查询来删除选定行,否则所有的记录都会被删除。
#语法:
    delete from 表名 where 条件表达式;

8.排序显示数据库中的数据

这个不用我多说了吧,相信通过select * from 表名 就可以显示我们所要查看的表格,那怎么让它按照我们的想法去现实有序的表呢。

#SQLite的order by子句是用来基于一个或多个列按升序或降序顺序排列数据
#需要与关键字 asc(升序)     desc(降序)搭配使用
#语法:order by 列名 排序关键字
#例如:学生信息表中年龄升序显示
    select * from 学生信息表 order by 年龄 asc;    #升序
    select * from 学生信息表 order by 年龄 desc;   #降序

9.外键策略

我们现在创建的表互相之间都是独立的,我们要将它们建立关系,又该怎么办呢。这个时候就可是使用我们的外键策略

********************************外键约束******************************
#外键约束:foreign key(列名) references 表名(依赖) 在sqlite3数据库默认关闭外键约束,所以需要打开使用
#执行数据库指令:
                PRAGMA foreign_keys = ON
 
#功能:让数据库表之间建立关系,例如我们想建立一个学生信息表和课程表,它们之间是没有任何关系,但是选课表中的学号和课程科目 分别与学生信息表和课程表有关,当有该学号学生以及有该课程才可以选课。
#注意: 外键约束必须放在末尾,否则建立失败
create table 学生信息表(
    学号 integer primary key autoincrement,
    姓名 char(20) not null
);
 
create table 课程表 (
        科目 char(20) not null unique
)
 
create table 选课(
    学号 integer not null,
    科目 char(20) not null,
    unique(学号,科目),
    foreign key(学号) references 学生信息表(学号),
    foreign key(科目) references 课程表(科目)
)
#当插入选课数据时会依赖 学生信息表和课程表进行插入,如果没有则插入失败
#当课程表有相关数据时,删除被依赖表则无法删除

10.数据库查询

我们除了可以去显示数据库中的内容来找到我们所需要的数据,但如果数据库中的数据有上万条我们又当如何,我们怎么去准确找到我们所需的数据呢。

********************************单表查询**********************************
#1.显示所有列数据:
 
	select * from 表名;	# *代表所有数据
 
#2.显示部分列:
 
	select column1,column2 from 表名; #只显示 column1,column2 
 
#3.显示部分行:过滤不需要的行 where
 
	select * from 表名 where 条件表达式;
 
#4.起别名: as 关键字
 
	select 列名1 as 别名名称1 , 列名2 as 别名名称2 from 表名;
 
#5.算术运算 + 别名
 
	select 列名1 + 数据 as 别名1 from 表名;
 
#6.去重操作: distinct 
 
	select distinct 列名 from 表名''
 
#7.排序显示: order by        升序 asc  降序 desc
 
	select * from 表名 order by 列名;		#默认升序
 
	select * from 表名 order by 列名 desc;	#降序





************************************模糊查询***************************************
#1.where 字句 + 模糊查询: 
 
#    	%  代表任意多字符
 
		例如:select * from 表名 where  列名 like '%数据';
 
#        _  任意代表一个字符
 
		例如:select * from 表名 where  列名 like '_数据';





**********************************多表查询*****************************************
#1.内连接查询  join 交叉连接:cross   笛卡尔乘积
 
    select * from 表名1 cross join 表名2;
 
#2.内连接查询  join 自然连接:natural 自动匹配表内所有同名列数据
 
    select * from 表名1 natural join 表名2;
 
#3.内连接查询 join 指定列匹配 :inner 搭配 using
 
    select * from 表名1 inner join 表名2 using(表2列名);
 
#4.内连接查询 join 指定列匹配 :inner 搭配 on
 
    select * from 表名1 inner join 表名2 on(表1.列名 = 表2.列名 );

当然这些我们都可以不用特意的记,用到的时候可以搜索。身为程序员的我们不仅要会写程序,还要会搜索。这些命令当我们用的多了之后,也就慢慢熟悉了,所以还是要多写代码才是。

*到这里,我们通过命令操控终端去增,删,改,查数据库已经完成了,那我们怎么通过代码的方式去实现呢,话说贪多嚼不烂,我们下期再见

  • 30
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以使用Python程序来实现将数据保存在SQLite3数据中。首先,您需要安装SQLite3的Python驱动程序,可以使用以下命令进行安装: ``` pip install pysqlite3 ``` 然后,您可以使用以下代码连接到SQLite3数据并创建一个表: ``` import sqlite3 # 连接到数据 conn = sqlite3.connect('database.db') # 创建一个游标 cursor = conn.cursor() # 创建表 cursor.execute(''' CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER) ''') # 提交事务 conn.commit() # 关闭连接 conn.close() ``` 您可以使用以下代码向表中插入新记录: ``` import sqlite3 # 连接到数据 conn = sqlite3.connect('database.db') # 创建一个游标 cursor = conn.cursor() # 插入记录 cursor.execute(''' INSERT INTO users (name, age) VALUES (?, ?) ''', ('John', 30)) # 提交事务 conn.commit() # 关闭连接 conn.close() ``` 您还可以使用以下代码查询表中的记录: ``` import sqlite3 # 连接到数据 conn = sqlite3.connect('database.db') # 创建一个游标 cursor = conn.cursor() # 查询记录 cursor.execute(''' SELECT * FROM users ''') # 获取所有记录 records = cursor.fetchall() # 打印记录 for record in records: print(record) # 关闭连接 conn.close() ``` ### 回答2: 为了满足数据保存的需求,我们选择将数据保存在SQLite3中。SQLite3是一种轻量级的嵌入关系型数据管理系统,其最大的特点是无需独立的服务器进程,只需要一个动态链接即可。以下是为什么选择使用SQLite3进行数据保存的原因: 1. 轻量级:SQLite3占用的内存资源相对较小,适合在资源有限的设备上进行数据保存。它的文件大小通常不超过几十KB,对于嵌入系统和移动设备来说非常适用。 2. 跨平台支持:SQLite3支持多个操作系统,包括Windows、Linux、iOS等。这意味着我们可以在不同的平台上轻松地使用和管理数据。 3. 数据性能:SQLite3可以提供很好的性能,支持高速并发查询和事务处理。其SQL语法是标准的,可以使用传统的SQL查询和更新语句对数据进行操作。 4. 安全性:SQLite3提供了一些安全机制,如支持加密、权限管理等。我们可以设置密码保护数据文件,以确保数据的安全性。 5. 易于使用SQLite3使用相对简单,无需额外的服务器配置和管理。我们只需要在程序中连接数据,并执行相关的SQL语句,即可实现数据的保存和查询。 总之,将数据保存在SQLite3中可以满足数据保存的需求,并提供了轻量级、跨平台、高性能和安全等优势。无论是在嵌入系统还是移动设备中都非常适用。 ### 回答3: SQLite3是一种轻量级的嵌入关系型数据管理系统。它可以将数据以表的形存储在一个单一的文件中,这个文件即为SQLite3数据。下面是关于为什么数据要求保存在SQLite3中的一些原因。 首先,SQLite3是一个独立的数据引擎,不需要任何独立的服务器进程或线程来运行。这使得它非常适合于移动设备和嵌入系统,因为它可以轻松地集成到应用程序中。同时,SQLite3的文件格也非常紧凑,占用的存储空间较小。 其次,SQLite3提供了强大的事务支持。这意味着在对数据进行写操作时,可以使用事务来保证数据的一致性和完整性。这对于需要频繁进行数据更新和修改的应用程序尤为重要,可以避免数据损坏和丢失。 此外,SQLite3提供了一个丰富的SQL语法和功能,支持复杂的查询和数据操作。它支持各种数据类型,包括整型、浮点型、字符串型等,以及聚合函数、子查询、连接等高级功能。这使得开发者可以灵活地管理和操作数据。 最后,SQLite3还提供了对数据的高效访问和查询。它使用B树数据结构,可以快速定位和检索数据,具备较好的性能表现。同时,SQLite3还支持索引和视图的创建,可以进一步提高查询的效率。 综上所述,将数据保存在SQLite3中有以下几个好处:它可以方便地集成到应用程序中,具备强大的事务支持和丰富的SQL功能,同时具备高效的访问和查询性能。因此,对于小型和简单的应用,特别是移动设备和嵌入系统,选择SQLite3作为数据存储是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值