嵌入式学习Day35
数据库:
SQLite3简介
SQLite3是一款轻量级的嵌入式关系型数据库引擎,无需服务器配置,支持跨平台操作,适用于移动应用、桌面软件及小型Web项目。它以单文件形式存储数据,支持标准SQL语法,提供事务、触发器等高级功能。
SQL struct query language 关系型数据库 非关系 芒果db
ddl data defination language 建表
dml 新增 修改 删除一行 data modifty
dql 查询 data query language 查询 select
特点:
1、开源 C语言开发
2、代码量少 1万行左右,总大小10M以内
3、绿色软件无需安装
4、文件型数据库,可以移动。
5、数据容量最大 2T
安装SQLite3
在大多数Linux发行版中,SQLite3可以通过包管理器直接安装。对于基于Debian的系统(如Ubuntu),使用以下命令:
sudo apt install sqlite3
启动SQLite3命令行工具
安装完成后,可以通过以下命令启动SQLite3交互式命令行:
sqlite3
如果需要打开或创建一个数据库文件:
sqlite3 database_name.db
基本SQLite3命令
在SQLite3命令行中,命令以.
开头,而SQL语句则以;
结尾。
显示帮助信息:
.help
退出SQLite3命令行:
.exit
查看当前打开的数据库文件:
.databases
显示当前数据库中的所有表:
.tables
查看表的结构(schema):
.schema table_name
执行SQL操作
创建一个新表:
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);
插入数据:
INSERT INTO users (name, age) VALUES ('Alice', 30);
查询数据:
SELECT * FROM users;
更新数据:
UPDATE users SET age = 31 WHERE name = 'Alice';
删除数据:
DELETE FROM users WHERE name = 'Alice';
导入和导出数据
将SQL语句导出到文件:
.output filename.sql
.dump
.output stdout
从SQL文件导入数据:
.read filename.sql
导出查询结果为CSV:
.mode csv
.output data.csv
SELECT * FROM users;
.output stdout
导入CSV文件到表中:
.mode csv
.import data.csv users
其他实用命令
设置输出格式:
.mode column
.headers on
计时SQL语句的执行时间:
.timer on
显示当前SQLite版本:
SELECT sqlite_version();
更改数据库连接:
.open new_database.db
SQLite3提供了灵活的数据库管理功能,适用于小型项目和嵌入式系统。通过上述命令可以完成大多数常见的数据库操作任务。
自动增长列(AUTOINCREMENT)
在SQLite3中,自动增长列通常通过INTEGER PRIMARY KEY
或INTEGER PRIMARY KEY AUTOINCREMENT
实现。这两种方式都能自动为每行生成唯一递增的整数ID,但存在细微区别:
-
仅用
INTEGER PRIMARY KEY
:- 列值会自动递增,但回收的ID可能被重复使用(如删除行后)。
- 示例:
CREATE TABLE users (id INTEGER PRIMARY KEY,name TEXT );
-
使用
AUTOINCREMENT
:- 确保ID严格递增且永不重复(即使删除行)。
- 会额外消耗存储空间以维护最大ID值。
- 示例:
CREATE TABLE logs (log_id INTEGER PRIMARY KEY AUTOINCREMENT,message TEXT );
插入时间列
记录插入时间通常使用DEFAULT
约束配合时间函数:
-
当前时间戳(UTC):
- 使用
CURRENT_TIMESTAMP
作为默认值,记录插入时的UTC时间。 - 示例:
CREATE TABLE orders (id INTEGER PRIMARY KEY,order_time TEXT DEFAULT CURRENT_TIMESTAMP );
- 使用
-
本地时间:
- 若需本地时间,可结合
DATETIME
函数与'now'
参数。 - 示例:
CREATE TABLE events (id INTEGER PRIMARY KEY,created_at TEXT DEFAULT (DATETIME('now', 'localtime')) );
- 若需本地时间,可结合
-
其他时间格式:
- 通过
STRFTIME
自定义格式(如仅日期)。 - 示例:
CREATE TABLE reports (id INTEGER PRIMARY KEY,date_only TEXT DEFAULT (STRFTIME('%Y-%m-%d', 'now')) );
- 通过
注意事项
- 自动增长列仅适用于
INTEGER PRIMARY KEY
。 - 时间列建议使用
TEXT
类型存储,便于格式化输出。 - 插入时若显式指定NULL,自动增长和时间默认值仍会生效。