文章目录
- SQLite3 (二)
-
- 八、 数据库配置
- 九、 sqlite约束
- 十、 高阶查询
- 十一、 空值和别名
- 十二、 触发器
- 十三、 索引
- 十四、 视图
- 十五、 事务
- 十六、常用函数
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
命令来控制打印的调试状态 ,默认为flase
,SQL
解析器不会随着它解析 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 约束