|
点击左上方蓝色“一口Linux”,选择“设为星标”
第一时间看干货文章
?【干货】嵌入式驱动工程师学习路线?【干货】Linux嵌入式知识点-思维导图-免费获取?【就业】一个可以写到简历的基于Linux物联网综合项目?【就业】找工作简历模版
tlqhndjfplz64031561924.gif
前言数据在实际工作中应用非常广泛,数据库的产品也比较多,oracle、DB2、SQL2000、mySQL;基于嵌入式linux的数据库主要有SQLite, Firebird, Berkeley DB, eXtremeDB。
本文主要讲解数据库SQLite,通过这个开源的小型的嵌入式数据库带领大家掌握一些基本的数据库操作,这些操作在很多系统中都是通用的,可谓学一通百。
SQLite
2kr1t2kruil64031562024.jpg
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。
作者D.RichardHipp2000年1月,Hipp开始和一个同事讨论关于创建一个简单的嵌入式SQL数据库的想法,这个数据库将使用GNU DBM哈希库(gdbm)做后台,同时这个数据库将不需要安装和管理支持。
后来,一有空闲时间,Hipp就开始实施这项工作,2000年8月,SQLite 1.0版发布了。【在此向大神献上我的膝盖!】
它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。
SQLite特性零配置一无需安装和管理配置;储存在单一磁盘文件中的一个完整的数据库;数据库文件可以在不同字节顺序的机器间自由共享;支持数据库大小至2TB;足够小,全部源码大致3万行c代码,250KB;比目前流行的大多数数据库对数据的操作要快。[/ol]安装现在运行的主要是sqlite3版本,在ubuntu下安装也非常方便。
sudo apt-get install sqlite sqlite3 安装应用程序
sudo apt-get install libsqlite3-dev 安装库+头文件,用代码操作数据库必须安装
查看版本号:输入命令 sqlite3进入操作界面,输入命令.version,即可查看详细版本号。
nn2ezebfq0564031562124.png
也可以使用下面命令,安装图形化操作工具:
sudo apt-get install sqlitebrowser 图形化工具建立数据库
除此之外,还可以部署在windows下,本文只讨论ubtuntu下,采用命令行方式来操作数据库。
数据类型操作数据库,主要就是操作表,表的每一列内容都有一定数据类型,比如整型值、字符串、布尔型等。
Sqlite3主要数据类型如下:
数据类型定义数据类型 NULL表示该值为NULL值。INTEGER无符号整型值。REAL浮点值。TEXT文本字符串,存储使用的编码方式为UTF-8、UTF-16BE、UTF-16LE。BLOB存储Blob数据,该类型数据和输入数据完全相同,1表示true,0表示false。同时sqlite3也接受如下的数据类型:
数据类型定义smallint16位的整数。interger32位的整数。decimal(p,s)精确值p是指全部有几个十进制数,s是指小数点后可以有几位小数。如果没有特别指定,则系统会默认为p=5 s=0 。float32位元的实数。double64位元的实数。char(n)n 长度的字串,n不能超过 254。varchar(n)长度不固定且其最大长度为 n 的字串,n不能超过 4000。graphic(n)和 char(n) 一样,不过其单位是两个字节, n不能超过127。这个形态是为了支持两个字节长度的字体,如中文字。vargraphic(n)可变长度且其最大长度为n的双字元字串,n不能超过2000date包含了 年份、月份、日期。time包含了 小时、分钟、秒。timestamp包含了 年、月、日、时、分、秒、千分之一秒。约束表的每一列都有一些限制属性,比如有的列的数据不能重复,有的则限制数据范围等,约束就是用来进一步描述每一列数据属性的。
SQLite 数据库常用约束如下:
名称定义NOT NULL- 非空UNIQUE唯一PRIMARY KEY主键FOREIGN KEY外键CHECK条件检查DEFAULT默认非空 NOT NULL有一些字段我们可能一时不知到该填些什么,同时它也没设定默认值, 当添加数据时,我们把这样的字段空着不填,系统认为他是 NULL 值。
但是还有另外一类字段,必须被填上数据,如果不填,系统就会报错。这样的字段被称为 NOT NULL 非空字段,需要在定义表的时候事先声明。
唯一 UNIQUE除了主列以为,还有一些列也不能有重复值。
主键 PRIMARY KEY一般是整数或者字符串,只要保证唯一就行。在 SQLite 中,主键如果是整数类型,该列的值可以自动增长。
外键 FOREIGN KEY我们的数据库中已经有 Teachers 表了,假如我们再建立一个 Students 表, 要求 Students 表中的每一个学生都对应一个 Teachers 表中的教师。
很简单,只需要在 Students 表中建立一个 TeacherId 字段,保存对应教师的 Id 号, 这样,学生和教师之间就建立了关系。
问题是:我们有可能给学生存入一个不在 Teachers 表中的 TeacherId 值, 而且发现不了这个错误。
这种情况下,可以把 Students 表中 TeacherId 字段声明为一个外键, 让它的值对应到 Teachers 表中的 Id 字段上。
这样,一旦在 Students 表中存入一个不存在的教师 Id ,系统就会报错。
默认值 DEFAULT有一些特别的字段列,在每一条记录中,他的值基本上都是一样的。只是在个别情况下才改为别的值,这样的字段列我们可以给他设一个默认值。
条件检查 CHECK某些值必须符合一定的条件才允许存入,这是就需要用到这个 CHECK 约束。
常用命令下面介绍Shell模式中的各常用命令的使用。
命令功能.help可显示shell模式中可使用的所有命令列表.database显示数据库信息;包含当前数据库的位置.mode column使得SQL语句处理的结果以列对齐的方式显示.mode listcolumn.headers on/off打开关闭列标题显示开关,以使得查询结果在屏幕显示时具有列标题.tables列出当前打开的数据库中共有多少张表.exit退出SQLite环境.schema foods显示表foods 创建时的SQL语句.schema显示所有表被创建时的语句.nullvalue STRING查询时用指定的串代替输出的NULL串 默认为.nullvalue ''.show显示shell模式中定义的与输出相关的一些设置.output file.csv设置输出文件格式为CSV,文件名为file.csv.separator ,设置select语句输出的列数据间以“ ,”分隔.output stdout恢复输出内容到标准输出设备(屏幕)【注意】sqlite的命令都是.开头的,操作语句前面是没有.的。
使用实例数据库的操作语句主要是增删改查,下面我们通过一些实例让大家了解数据库的这些基本操作。
表类型假设我们要创建一个教学管理的数据库jxgl.db,数据库中要保存学生表STUDENT。
snosnamessexsagesdept95001yikoum21cs95002pengm21cs根据我们的常识,可知每一列的数据有以下特性:
sno 学号:整型值,每个人学号是唯一的,学校一般用学号来区分所有的学生,而且一般学号是递增的,所以我们设置sno为primary key;sname 姓名:一般是字符串,可以重复,但是不能为空;ssex 性别:字符串,可以为空;sage 年龄:整型值,假定年龄要大于14;sdept 专业:字符串,可以为空,此处我们默认为'CS'。下面我们一步步实现这个数据库的所有操作。
创建教学管理“jxgl”数据库数据库的打开和退出,使用如下命令。
vromb0cy4kl64031562224.png
创建表: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');
该表的属性就是按照上一节表属性 执行结果:
egmljmx5jng64031562324.png
查看表:
niemu2fk2hk64031562425.png
看到STUDENT,说明该表创建好了。【注意】
操作语句不是命令,前面不要加. ;操作语句后面一定要;结尾,如果漏掉了,一定要补上分号;操作语句对字母的全角半角很敏感,所有的符号都要用半角。[/ol]插入数据插入数据采用insert 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');
执行结果如下: |
|