嵌入式数据库 --- sqlite3的基本操作

简介: 嵌入式数据库 --- sqlite3的基本操作

0. 前言

数据在实际工作中应用非常广泛,数据库的产品也比较多,oracle、DB2、SQL2000、mySQL;基于嵌入式linux的数据库主要有SQLite, Firebird, Berkeley DB, eXtremeDB。

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

1. SQLite3安装

如果是基于源码的开发,参看博客Linux下利用c/c++使用sqlite

如果只是应用,则用下面命令安装即可

sudo apt-get install sqlite sqlite3   安装应用程序
sudo apt-get install libsqlite3-dev   安装库+头文件,用代码操作数据库必须安装

安装完成之后,可以看到版本信息

2. SQLite3数据类型

每个存储在 SQLite 数据库中的值都具有以下存储类之一:

数据类型 定义
NULL 表示该值为NULL值
INTEGER 无符号整形值
REAL 浮点值
TEXT 文本字符串,存储使用的编码方式为UTF-8/UTF-16BE/UFT-16LE
BLOB 存储Blob数据,该类型数据和输入数据完全相同,1表示true,0表示false

3. 约束

表的每一列都有一些限制属性,比如有的列的数据不能重复,有的则限制数据范围等,约束就是用来进一步描述每一列数据属性的。 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 约束。

4. shell模式常用命令

下面介绍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 恢复输出内容到标准输出设备(屏幕)

【Note】sqlite的命令都是.开头的,操作语句前面是没有.的。

5. 使用SQLite3操作数据库命令

5.1 创建数据库

1>

sqlite3 test.db

2> 进入sqlite shell之后,直接用.open命令,

sqlite>.open test.db

上面的命令创建了数据库文件 test.db,位于 sqlite3 命令同一目录下。

打开已存在数据库也是用 .open 命令,以上命令如果 test.db 存在则直接会打开,不存在就创建它。

5.2 创建表create

SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表。创建基本表,涉及到命名表、定义列及每一列的数据类型。其基本语法如下:

CREATE TABLE database_name.table_name(
   column1 datatype  PRIMARY KEY(one or more columns),
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
);

实例

创建了一个 COMPANY 表,ID 作为主键,NOT NULL 的约束表示在表中创建纪录时这些字段不能为 NULL:

sqlite> CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

5.3 删除表drop

SQLite 的 DROP TABLE 语句用来删除表定义及其所有相关数据、索引、触发器、约束和该表的权限规范。其基本语法如下:

DROP TABLE table_name;

实例

确认COMPANY表存在,然后使用drop指令删除表,然后再查看,确认删除成功。

5.4 插入insert

SQLite 的 INSERT INTO 语句用于向数据库的某个表中添加新的数据行。其基本语法如下:

INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]  
VALUES (value1, value2, value3,...valueN);

在这里,column1, column2,…columnN 是要插入数据的表中的列的名称。

如果要为表中的所有列添加值,您也可以不需要在 SQLite 查询中指定列名称。但要确保值的顺序与列在表中的顺序一致。SQLite 的 INSERT INTO 语法如下:

INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);

实例

假设您已经在 testDB.db 中创建了 COMPANY表,如下所示:

sqlite> CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

插入一条记录

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );

5.5 select

SQLite 的 SELECT 语句用于从 SQLite 数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。其基本语法如下:

SELECT column1, column2, columnN FROM table_name;
• 1

在这里,column1, column2…是表的字段,他们的值即是要获取的。

5.6 where语句

SQLite的 WHERE 子句用于指定从一个表或多个表中获取数据的条件。

使用 WHERE 子句来过滤记录,只获取需要的记录。WHERE 子句不仅可用在 SELECT 语句中,它也可用在 UPDATE、DELETE 语句中,等等。其基本语法如下:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition]

实例

sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;

5.7 修改Update

UPDATE 查询用于修改表中已有的记录。可以使用带有 WHERE 子句的 UPDATE 查询来更新选定行,否则所有的行都会被更新。其基本语法如下:

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

实例

假设 COMPANY 表有以下记录:

ID NAME AGE ADDRESS SALARY


1 Paul 32 California 20000.0

2 Allen 25 Texas 15000.0

3 Teddy 23 Norway 20000.0

4 Mark 25 Rich-Mond 65000.0

5 David 27 Texas 85000.0

6 Kim 22 South-Hall 45000.0

7 James 24 Houston 10000.0

下面是一个实例,它会更新 ID 为 6 的客户地址:

sqlite> UPDATE COMPANY SET ADDRESS = 'Texas' WHERE ID = 6;

5.8 删除 delete

SQLite 的 DELETE 查询用于删除表中已有的记录。可以使用带有 WHERE 子句的 DELETE 查询来删除选定行,否则所有的记录都会被删除。其基本语法如下:

DELETE FROM table_name WHERE [condition];

实例

假设 COMPANY 表有以下记录:

ID NAME AGE ADDRESS SALARY


1 Paul 32 California 20000.0

2 Allen 25 Texas 15000.0

3 Teddy 23 Norway 20000.0

4 Mark 25 Rich-Mond 65000.0

5 David 27 Texas 85000.0

6 Kim 22 South-Hall 45000.0

7 James 24 Houston 10000.0

下面是一个实例,它会删除 ID 为 7 的客户:

sqlite> DELETE FROM COMPANY WHERE ID = 7;

现在,COMPANY 表有以下记录:

ID NAME AGE ADDRESS SALARY


1 Paul 32 California 20000.0

2 Allen 25 Texas 15000.0

3 Teddy 23 Norway 20000.0

4 Mark 25 Rich-Mond 65000.0

5 David 27 Texas 85000.0

6 Kim 22 South-Hall 45000.0

参看链接:

https://www.cnblogs.com/jiayongqiang/p/5300068.html

https://www.runoob.com/sqlite/sqlite-delete.html

https://juejin.cn/post/6876003507976011783#heading-25


相关文章
|
26天前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
31 8
|
1月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
|
1月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
|
1月前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
2月前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
2月前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。
161 1
|
1月前
|
存储 缓存 关系型数据库
sqlite 数据库 介绍
sqlite 数据库 介绍
40 0
|
1月前
|
存储 NoSQL API
.NET NoSQL 嵌入式数据库 LiteDB 使用教程
.NET NoSQL 嵌入式数据库 LiteDB 使用教程~
|
6月前
|
存储 数据库连接 数据库
Android数据存储:解释SQLite数据库在Android中的使用。
Android数据存储:解释SQLite数据库在Android中的使用。
82 0
|
5月前
|
数据库 Android开发 数据安全/隐私保护
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
在 Android Studio 中结合使用 SQLite 数据库实现简单的注册和登录功能
234 2