SQLite3语法(二)

这篇博客详细介绍了SQLite3的数据库配置,包括PRAGMA命令的使用,如auto_vacuum、cache_size等参数的设置。此外,还讨论了SQLite的约束,如NOT NULL、UNIQUE和PRIMARY KEY,以及高阶查询技巧,如多表查询和UNION子句。最后,文章涵盖了触发器、索引、视图和事务的使用,提供了创建、查看和管理这些数据库元素的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQLite3 (二)

八、 数据库配置

1、 语法

SQLite 的 PRAGMA 命令是一个特殊的命令,可以用在 SQLite 环境内控制各种环境变量和状态标志。一个 PRAGMA 值可以被读取,也可以根据需求进行设置。

PRAGMA pragma_name;  --查询pragma_name的值
PRAGMA pragma_name = value;  --设置该值

2、 常用配置

2.1 auto_vacuum
2.1.1 VACUUM

VACUUM 命令通过复制主数据库中的内容到一个临时数据库文件,然后清空主数据库,并从副本中重新载入原始的数据库文件。这消除了空闲页,把表中的数据排列为连续的,另外会清理数据库文件结构。

如果表中没有明确的整型主键(INTEGER PRIMARY KEY),VACUUM 命令可能会改变表中条目的行 ID(ROWID)。VACUUM 命令只适用于主数据库,附加的数据库文件是不可能使用 VACUUM 命令。

如果有一个活动的事务,VACUUM 命令就会失败。VACUUM 命令是一个用于内存数据库的任何操作。由于 VACUUM 命令从头开始重新创建数据库文件,所以 VACUUM 也可以用于修改许多数据库特定的配置参数

语法:

sqlite3 database_name "VACUUM;" --对整个数据库进行重载
VACUUM;
VACUUM table_name;  --对特定表上进行数据重载
2.1.2 自动VACUUM
PRAGMA [database.]auto_vacuum;
PRAGMA [database.]auto_vacuum = mode;
Pragma 值 描述
0 或 NONE 禁用 Auto-vacuum。这是默认模式,意味着数据库文件尺寸大小不会缩小,除非手动使用 VACUUM 命令。
1 或 FULL 启用 Auto-vacuum,是全自动的。在该模式下,允许数据库文件随着数据从数据库移除而缩小。
2 或 INCREMENTAL 启用 Auto-vacuum,但是必须手动激活。在该模式下,引用数据被维持,自由页面只放在自由列表中。这些页面可在任何时候使用 incremental_vacuum pragma 进行覆盖。
2.2 cache_size

获取或暂时设置在内存中页面缓存的最大尺寸

PRAGMA [database.]cache_size;
PRAGMA [database.]cache_size = pages;

pages:表示在缓存中的页面数。内置页面缓存的默认大小为 2,000 页,最小尺寸为 10 页

2.3 case_sensitive_like

控制内置的 LIKE 表达式的大小写敏感度。默认情况下,该 Pragma 为 false,这意味着,内置的 LIKE 操作符忽略字母的大小写。语法如下:

PRAGMA case_sensitive_like = [true|false];
2.4 count_changes

获取或设置数据操作语句的返回值,如 INSERT、UPDATE 和 DELETE

PRAGMA count_changes;
PRAGMA count_changes = [true|false];

默认情况下,该 Pragma 为 false,这些语句不返回任何东西。如果设置为 true,每个所提到的语句将返回一个单行单列的表,由一个单一的整数值组成,该整数表示操作影响的行

2.5 database_list

将用于列出了所有的数据库连接

PRAGMA database_list;

返回一个单行三列的表格,每当打开或附加数据库时,会给出数据库中的序列号,它的名称和相关的文件

2.6 encoding

控制字符串如何编码及存储在数据库文件中。语法如下:

PRAGMA encoding;
PRAGMA encoding = format;

格式值可以是 UTF-8、UTF-16le 或 UTF-16be 之一

2.7 freelist_count

返回一个整数,表示当前被标记为免费和可用的数据库页数

PRAGMA [database.]freelist_count;
2.8 journal_mode

获取或设置控制日志文件如何存储和处理的日志模式

PRAGMA [database.]journal_mode;
PRAGMA [database.]journal_mode = mode;
Pragma 值 描述
DELETE 默认模式。在该模式下,在事务结束时,日志文件将被删除。
TRUNCATE 日志文件被阶段为零字节长度。
PERSIST 日志文件被留在原地,但头部被重写,表明日志不再有效。
MEMORY 日志记录保留在内存中,而不是磁盘上。
OFF 不保留任何日志记录。
2.9 max_page_count

为数据库获取或设置允许的最大页数

PRAGMA [database.]max_page_count;
PRAGMA [database.]max_page_count = max_page;
2.10 page_size

获取或设置数据库页面的大小

PRAGMA [database.]page_size;
PRAGMA [database.]page_size = bytes;
--重新设置大小后,使用vacuum刷新页面
VACUUM;
2.11 parser_trace

随着它解析 SQL 命令来控制打印的调试状态 ,默认为flaseSQL 解析器不会随着它解析 SQL 命令来打印出它的状态

PRAGMA parser_trace = [true|false];
2.12 secure_delete
PRAGMA [database.]secure_delete;
PRAGMA [database.]secure_delete = [true|false];

控制内容是如何从数据库中删除 ,安全删除标志的默认值通常是关闭的

2.13 temp_store

获取或设置临时数据库文件所使用的存储模式

PRAGMA temp_store;
PRAGMA temp_store = mode;
Pragma 值 描述
0 或 DEFAULT 默认使用编译时的模式。通常是 FILE。
1 或 FILE 使用基于文件的存储。
2 或 MEMORY 使用基于内存的存储。
2.14 temp_store_directory

获取或设置用于临时数据库文件的位置

PRAGMA temp_store_directory;
PRAGMA temp_store_directory = 'directory_path';
2.15 writable_schema

获取或设置是否能够修改系统表

PRAGMA writable_schema;
PRAGMA writable_schema = [true|false];

如果设置了该 Pragma,则表以 sqlite_ 开始,可以创建和修改,包括 sqlite_master 表。使用该 Pragma 时要注意,因为它可能导致整个数据库损坏

还有一些其他的配置方法,可以去官方文档自己了解一下

九、 sqlite约束

约束是在表的数据列上强制执行的规则。这些是用来限制可以插入到表中的数据类型。这确保了数据库中数据的准确性和可靠性

约束可以是列级或表级。列级约束仅适用于列,表级约束被应用到整个表

  • NOT NULL 约束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码海探幽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值