想要学会一个东西,我们必须要学会问为什么,我先来,为什么要学习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.列名 );
当然这些我们都可以不用特意的记,用到的时候可以搜索。身为程序员的我们不仅要会写程序,还要会搜索。这些命令当我们用的多了之后,也就慢慢熟悉了,所以还是要多写代码才是。
*到这里,我们通过命令操控终端去增,删,改,查数据库已经完成了,那我们怎么通过代码的方式去实现呢,话说贪多嚼不烂,我们下期再见