嵌入式数据库Sqlite3之如何使用基本的命令操作

技术嵌入式数据库Sqlite3之如何使用基本的命令操作这篇文章主要介绍“嵌入式数据库Sqlite3之如何使用基本的命令操作”,在日常操作中,相信很多人在嵌入式数据库Sqlite3之如何使用基本的命令操作问题上存在疑惑,小

本文主要介绍“如何使用基本命令操作嵌入式数据库Sqlite3”。在日常操作中,相信很多人对于如何使用基本命令操作嵌入式数据库Sqlite3都有疑问。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮助大家解决如何使用基本命令操作嵌入式数据库Sqlite3的疑惑!接下来,请和边肖一起学习!

SQLite

嵌入式数据库Sqlite3之如何使用基本的命令操作

SQLite是一个轻量级数据库,是一个符合ACID的关系数据库管理系统,它包含在一个相对较小的C库中。

作者D.RichardHipp

2000年1月,Hipp开始与一位同事讨论创建一个简单的嵌入式SQL数据库的想法。这个数据库将使用GNU DBM哈希库(gdbm)作为后台,这个数据库不需要安装和管理支持。后来,每当有空闲时间,Hipp就开始实施这项工作。2000年8月,SQLite版本发布。[这里我向大神献上我的膝盖!】

它的设计目标是嵌入式,已经在很多嵌入式产品中使用。它占用的资源非常少。在嵌入式设备中,可能只需要几百K的内存。它可以支持Windows/Linux/Unix等主流操作系统,也可以与Tcl、C#、PHP、Java等多种编程语言相结合。以及ODBC接口。与Mysql和PostgreSQL这两个开源的世界著名的数据库管理系统相比,它的处理速度要比它们快。

SQLite特性

鸿蒙系统正式战略合作,打造——HarmonyOS技术社区。

配置一不需要安装和管理配置;

存储在单个磁盘文件中的完整数据库;

数据库文件可以在不同字节序列的机器之间自由共享。

支持高达2TB的数据库大小;

足够小,整个源代码大概3万行C代码,250KB

它可以比目前大多数流行的数据库更快地操作数据。

安装

现在主要运行sqlite3版本,在ubuntu下安装非常方便。

Sudoapt-getinstallsqlite3安装应用程序sudoapt-getinstallsqlite3-dev安装库头文件,必须安装该头文件才能用代码操作数据库。查看版本号:输入命令sqlite3进入操作界面,输入命令。版本来查看详细的版本号。

嵌入式数据库Sqlite3之如何使用基本的命令操作

您也可以使用以下命令安装图形操作工具:

图形工具sudo apt-getinstallsqlite browser可用于构建数据库。此外,它也可以部署在windows下。本文只讨论如何在ubtuntu下通过命令行操作数据库。

数据类型

操作数据库主要是一个操作表。表的每一列都有一定的数据类型,如整数值、字符串、布尔类型等。

Sqlite3的主要数据类型如下:

类型定义数据类型空表示该值为空值。INTEGER无符号整数值。实浮点值。存储在UTF-8、UTF-16BE和UTF-16LE中的文本字符串。Blob存储BLOB数据,它与输入数据完全相同。1表示真,0表示假。同时,sqlite3还接受以下数据类型:

数据类型定义很小。

t16位的整数。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    list column
.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。

sno sname ssex sage sdept
95001 yikou m 21 cs
95002 peng m 21 cs

根据我们的常识,可知每一列的数据有以下特性:

  • sno 学号:整型值,每个人学号是唯一的,学校一般用学号来区分所有的学生,而且一般学号是递增的,所以我们设置sno为primary key;

  • sname 姓名:一般是字符串,可以重复,但是不能为空;

  • ssex 性别:字符串,可以为空;

  • sage 年龄:整型值,假定年龄要大于14;

  • sdept 专业:字符串,可以为空,此处我们默认为'CS'。

下面我们一步步实现这个数据库的所有操作。

创建教学管理“jxgl”数据库

数据库的打开和退出,使用如下命令。

嵌入式数据库Sqlite3之如何使用基本的命令操作

创建表:

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');

该表的属性就是按照上一节表属性 执行结果:

嵌入式数据库Sqlite3之如何使用基本的命令操作

查看表:

嵌入式数据库Sqlite3之如何使用基本的命令操作

看到STUDENT,说明该表创建好了。【注意】

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 操作语句不是命令,前面不要加. ;

  3. 操作语句后面一定要;结尾,如果漏掉了,一定要补上分号;

  4. 操作语句对字母的全角半角很敏感,所有的符号都要用半角。

插入数据

插入数据采用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');

执行结果如下:

嵌入式数据库Sqlite3之如何使用基本的命令操作

插入的数据只初始化部分值

设置了not null那一列 必须要赋值,而且表名字不区分大小写。

insert into student(sname,sage) values ('一口',19);

嵌入式数据库Sqlite3之如何使用基本的命令操作

查看表

用SELECT语句查看表中的内容:

SELECT * FROM STUDENT;

其中的 * 表示查看所有的数据信息。

嵌入式数据库Sqlite3之如何使用基本的命令操作

有没有看到,结果看起来不舒服啊,下面我们来调整下显示格式:

sqlite> .headers on          显示列名 sqlite> .mode column         列对齐

嵌入式数据库Sqlite3之如何使用基本的命令操作

删除一行信息

delete from student where sname='一口';

嵌入式数据库Sqlite3之如何使用基本的命令操作

由上图可见,名字为“一口”的那条记录被删除了。

修改一条记录的某个内容

UPDATE student SET sage=29 WHERE sname='张立';

嵌入式数据库Sqlite3之如何使用基本的命令操作

修改数据表结构。

修改表结构,需要用到语句ALTER  TABLE。下面我们向STUDENT表增加“spwd”列,其数据类型为TEXT型,用SELECT命令查看表中内容。

ALTER TABLE STUDENT ADD spwd TEXT default '123456';

嵌入式数据库Sqlite3之如何使用基本的命令操作

修改表名字

alter table student rename to stu;

嵌入式数据库Sqlite3之如何使用基本的命令操作

删除数据表。

DROP TABLE STUDENT;

删除列

sqlite3没有实现删除一列的命令,要实现这个操作,需要先将该表拷贝到一个新表,但是只集成需要的列,要删除的列不继承过来。可以  用以下方式操作删除一列:

sqlite> create table test as select sno, sname,ssex,sage,sdept  from stu; sqlite> drop table stu; sqlite> alter table test rename to stu;

嵌入式数据库Sqlite3之如何使用基本的命令操作

由上图可知,我们刚才增加的列spwd被删除了。

sqlite进阶

where子句

如果我不想查看所有的数据,而指向查看某一个人的信息要怎么操作呢?我们就要借助where子句来实现。where子句可以结合操作语句来进程增删改查,是最常用的一个子句。

根据姓名查找记录:

Select * from student where sname='一口';

嵌入式数据库Sqlite3之如何使用基本的命令操作

根据学号查找记录:

Select * from student where sno=95001;

嵌入式数据库Sqlite3之如何使用基本的命令操作

根据姓名和年龄同时查找记录:

select *from student where sname='一口' and sage=19;

嵌入式数据库Sqlite3之如何使用基本的命令操作

显示某两列的数据

select sno,sname from student ;

嵌入式数据库Sqlite3之如何使用基本的命令操作

数据库的备份和恢复

现在我们假设要将表foods备份出为foodsdb.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>.dump       --把创建表及向表中插入记录的所有SQL语句显示在屏幕上 sqlite>.output  foodsdb.sql --指定dump命令输出到文件的文件名 sqlite>.dump        --输出创建并插入数据到基本表的SQL语句到output指定的文件 sqlite>.output stdout  --恢复输出内容到标准输出设备(屏幕) sqlite>.dump           --此时输出的SQL语句转回到屏幕  sqlite>Drop table foods; --删除foods表语句说明:

到此,关于“嵌入式数据库Sqlite3之如何使用基本的命令操作”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/42411.html

(0)

相关推荐

  • DNSlog注入测试

    技术DNSlog注入测试 DNSlog注入测试之前提到的时间盲注,虽然用途比较广泛,但其查询耗时较长;且盲注都需要发送大量请求,容易被WAF拦截。
    此时,我们就要用到DNSlog注入——一个可以以较少的

    礼包 2021年11月1日
  • 如何分析Linux环境变量和进程地址空间

    技术如何分析Linux环境变量和进程地址空间如何分析Linux环境变量和进程地址空间,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Linux环境变量和进程地

    攻略 2021年12月11日
  • debug R命令如何修改寄存器的值

    技术debug R命令如何修改寄存器的值这期内容当中小编将会给大家带来有关debug R命令如何修改寄存器的值,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。    IDE : Masm

    攻略 2021年11月11日
  • golang 如何识别文本格式(golang读取txt文件一次读取一行)

    技术Golang怎么读取单行超长的文本这篇文章主要介绍“Golang怎么读取单行超长的文本”,在日常操作中,相信很多人在Golang怎么读取单行超长的文本问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

    攻略 2021年12月22日
  • uni.app 子组件调用父组件的方法并传递数据

    技术uni.app 子组件调用父组件的方法并传递数据 uni.app 子组件调用父组件的方法并传递数据$refs子组件templatebutton点击我/button
    /template
    scripte

    礼包 2021年11月25日
  • 一寸照片尺寸多少厘米,一寸照片到底是多少厘米

    技术一寸照片尺寸多少厘米,一寸照片到底是多少厘米一寸照片对应的尺寸是2.5厘米*3.5厘米,其中宽度为2.5厘米,长度为3.5厘米一寸照片尺寸多少厘米。身份证和体检表等多采用小一寸的尺寸22×32mm,第二代身份证采用的

    生活 2021年10月20日