前言
数据在实际工作中应用广泛,数据库产品也很多,如DB2、mySQL等;基于嵌入式Linux的数据库主要有、、DB、.
本文主要讲解数据库。通过这个开源的小型嵌入式数据库,它将带领您掌握一些基本的数据库操作。这些操作在许多系统中都很常见。可以说,什么都可以学。
,是一个轻量级数据库,一个符合ACID的关系数据库管理系统,它包含在一个相对较小的C库中。
作者 D.
2000 年 1 月,Hipp 开始与一位同事讨论创建一个简单的嵌入式 SQL 数据库的想法,该数据库将使用 GNU DBM 哈希库 (gdbm) 作为后端,并且不需要安装或管理支持。后来,只要有空闲时间,希普就开始实施这项工作。 2000年8月,发布1.0版本。 【在此向上帝跪下! 】
其设计目标是嵌入式,目前已经应用于很多嵌入式产品中。它占用的资源非常低。在嵌入式设备中,只需几百 K 的内存就足够了。它可以支持/Linux/Unix等主流操作系统,并且可以与多种编程语言结合,如Tcl、C#、PHP、Java等,以及ODBC接口。与Mysql相比,这两个世界著名的开源数据库管理系统而言,它的处理速度比它们都快。
特征
零配置——无需安装和管理配置;
存储在单个磁盘文件中的完整数据库;
数据库文件可以在不同字节序的机器之间自由共享;
支持最大2TB的数据库大小;
足够小,整个源代码大约是30000行C代码,250KB;
它对数据的操作速度比当今大多数流行的数据库都要快。
安装
现在运行的主版本下安装也很方便。
sudo apt-get install sqlite sqlite3 安装应用程序
sudo apt-get install libsqlite3-dev 安装库+头文件,用代码操作数据库必须安装
查看版本号:输入命令进入操作界面,输入命令.,可以查看详细版本号。
也可以使用以下命令安装图形化操作工具:
sudo apt-get install sqlitebrowser 图形化工具建立数据库
另外,还可以部署在下面。本文仅讨论命令行方式操作数据库。
数据类型
操作数据库主要涉及到操作表。表的每一列都有特定的数据类型,例如整数值、字符串、布尔值等。
主要数据类型如下:
数据类型定义
数据类型 NULL
表示该值为NULL。
无符号整数值。
真实的
浮点值。
文本
文本字符串,用于存储的编码方式有UTF-8、UTF-16BE、UTF-16LE。
BLOB
存储 Blob 数据。这种类型的数据与输入数据完全相同。 1 表示 true,0 表示 false。
还接受以下数据类型:
数据类型定义
16 位整数。
32 位整数。
(p,s)
精确值p是指总共有多少位小数,s是指小数点后可以有多少位小数。如果不指定,系统将默认p=5 s=0。
漂浮
32 位实数。
64 位实数。
字符(n)
n 长度字符串,n 不能超过 254。
(n)
长度不固定的字符串,最大长度为n。 n 不能超过 4000。
(n)
与char(n)相同,但其单位是两个字节,n不能超过127。这种形式是为了支持两字节长度的字体,比如汉字。
(n)
变长的两字符字符串,最大长度为n,n不能超过2000
日期
包含年、月、日。
时间
包含小时、分钟和秒。
包含年、月、日、时、分、秒、千分之一秒。
约束
表的每一列都有一些限制性属性。比如有些列的数据不能重复,有些限制数据范围。约束用于进一步描述每一列的数据属性。常见的数据库约束如下:
名称定义
非空
- 不为空
仅有的
钥匙
主键
钥匙
外键
查看
状况检查
默认
非空
有些字段我们目前可能不知道要填写什么,并且没有为它们设置默认值。添加数据时,我们将这些字段留空,系统会认为它们是NULL值。但还有另一种类型的字段必须填写数据。如果不填写,系统会报错。此类字段称为 NOT NULL 字段,需要在定义表时提前声明。
仅有的
除了主列之外,还有一些列不能有重复值。
主键 KEY
一般是整数或者字符串,只要唯一即可。中,如果主键是整数类型,则该列的值可以自动增长。
外键KEY
我们的数据库中已经有一个表。如果我们再创建一个表,表中的每个学生必须对应表中的一个老师。这很简单。只需要在表中创建一个字段来保存对应老师的ID号即可。这样,学生和老师之间就建立了一种关系。问题是:可能会存储不在表中的学生值,但不会捕获错误。这种情况下,可以将表中的字段声明为外键,使其值与表中的Id字段对应。这样,一旦表中存储了不存在的教师ID,系统就会报错。
默认值
有一些特殊字段列,其值在每条记录中基本相同。仅在个别情况下改为其他值。我们可以为这样的字段列设置一个默认值。
状况检查 检查
某些值必须满足某些条件才能被允许存储。这就需要使用这个 CHECK 约束。
常用命令
下面介绍Shell模式下常用命令的使用。
命令功能
。帮助
显示 shell 模式下所有可用命令的列表
。
显示数据库信息;包含当前数据库的位置
。模式
导致SQL语句处理的结果以列对齐的方式显示
.模式列表
.开/关
打开列标题显示开关,使查询结果在屏幕上显示时具有列标题。
。
列出当前打开的数据库中有多少张表
。出口
退出环境
。食品
显示创建表foods时的SQL语句
。
显示所有表创建时的语句
。
查询时,使用指定的字符串而不是输出的NULL字符串。默认为 . ”
。展示
显示 shell 模式下定义的一些与输出相关的设置
.文件.csv
设置输出文件格式为CSV,文件名为file.csv
。 ,
设置语句输出的列数据以“,”分隔
。
将输出内容恢复到标准输出设备(屏幕)
[注意]命令均以.开头,没有.在操作语句前面。
使用示例
数据库的操作语句主要是增、删、改、查。下面我们将通过一些例子来让您了解数据库的这些基本操作。
桌子类型
假设我们要创建一个教学管理数据库jxgl.db,数据库中要存储学生表。
t
95001
一口
21
CS
95002
彭
21
CS
根据我们的常识,每一列的数据有以下特点:
下面我们一步步实现这个数据库的所有操作。
创建教学管理“jxgl”数据库
要打开和退出数据库,请使用以下命令。
创建表:
CREATE TABLE IF NOT EXISTS STUDENT(Sno integer primary key, Sname text not null, Ssex text,Sage integer check(Sage>14),Sdept text default 'CS');
该表的属性是执行上一节中表属性的结果:
查看表:
如果看到它,则表示该表已创建。 【注意】
操作语句不是命令,所以不要添加 。在它前面;
操作语句后面必须跟着;最后,如果缺少,必须添加分号;
运算语句对字母的全角和半角非常敏感,所有符号都必须使用半角。
插入数据
插入数据是使用into语句实现的,如下所示:
INSERT INTO STUDENT VALUES('95001','李勇','M',20,'CS');
INSERT INTO STUDENT VALUES('95002','刘晨','F',19,'IS');
INSERT INTO STUDENT VALUES('95003','王敏','F',18,'MA');
INSERT INTO STUDENT VALUES('95004','张立','M',18,'IS');
执行结果如下:
插入的数据仅初始化部分值
设置为not null的列必须赋值,并且表名不区分大小写。
insert into student(sname,sage) values ('一口',19);
查看表
使用语句查看表的内容:
SELECT * FROM STUDENT;
* 表示查看所有数据信息。
你有没有发现结果看起来很不舒服?我们来调整一下显示格式:
sqlite> .headers on 显示列名
sqlite> .mode column 列对齐
删除一行信息
delete from student where sname='一口';
从上图可以看出,名为“One Mouth”的记录已被删除。
修改某条记录的某条内容
UPDATE student SET sage=29 WHERE sname='张立';
修改数据表结构。
要修改表结构,需要使用ALTER TABLE语句。接下来,我们在数据类型为TEXT的表中添加“spwd”列,并使用命令查看表的内容。
ALTER TABLE STUDENT ADD spwd TEXT default '123456';
修改表名
alter table student rename to stu;
删除数据表。
DROP TABLE STUDENT;
删除列
没有删除列的命令。要实现此操作,需要先将表复制到新表中,但只集成所需的列,而不会继承要删除的列。您可以通过以下方式删除列:
sqlite> create table test as select sno, sname,ssex,sage,sdept from stu;
sqlite> drop table stu;
sqlite> alter table test rename to stu;
从上图可以看出,我们刚刚添加的spwd列已经被删除了。
高级 where 子句
如果我不想查看所有数据,而是想查看特定人员的信息,该怎么办?我们必须使用 where 子句来实现这一点。 where子句可以与操作语句结合来处理增、删、改、查等操作,是最常用的子句。
按名称查找记录:
Select * from student where sname='一口';
根据学号搜索记录:
Select * from student where sno=95001;
根据姓名和年龄查找记录:
select *from student where sname='一口' and sage=19;
显示两列数据
select sno,sname from student ;
数据库备份与恢复
现在我们假设我们要将表foods备份为.sql并使用命令来恢复数据库。只需按照以下步骤操作即可。
sqlite>.dump --把创建表及向表中插入记录的所有SQL语句显示在屏幕上
sqlite>.output foodsdb.sql --指定dump命令输出到文件的文件名
sqlite>.dump --输出创建并插入数据到基本表的SQL语句到output指定的文件
sqlite>.output stdout --恢复输出内容到标准输出设备(屏幕)
sqlite>.dump --此时输出的SQL语句转回到屏幕
sqlite>Drop table foods; --删除foods表语句说明:
上面的Drop是一条SQL语句,用于删除指定的表。因为是SQL语句,所以以“;”结尾
sqlite>.read foodsdb.sql --执行foodsdb.sql中的包含的所有SQL语句,用来重建刚删除的4张表及相关数据
好啦,下面就跟着依依君一步步操作吧。相信你对于增删改查的基本操作不会有任何问题。还有一些其他的子句和函数用法,将在下一篇文章中介绍。
依依君个人微信
添加依依君个人微信,即可接收Linux、嵌入式等独家介绍视频。
→ 共享选定的技术信息
→ 大师就像云通讯社区
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。