嵌入式第四十二天(数据库,网页设计)
一.
SQLite3 事务机制概述
SQLite3 通过事务机制确保数据操作的原子性、一致性、隔离性和持久性(ACID)。事务的开启方式直接影响性能和数据安全。
显式事务控制
通过 BEGIN
、COMMIT
、ROLLBACK
命令手动管理事务:
- 启动事务:
BEGIN TRANSACTION; -- 或 BEGIN IMMEDIATE/BEGIN EXCLUSIVE
- 提交事务:
COMMIT;
- 回滚事务:
ROLLBACK;
BEGIN IMMEDIATE
会立即获取写锁,BEGIN EXCLUSIVE
阻止其他连接访问数据库。
隐式事务行为
SQLite3 默认每条 SQL 语句自动封装在事务中。执行单条写操作(如 INSERT
)时,若未显式开启事务,系统会自动创建并提交事务。
事务隔离级别
SQLite3 支持以下隔离级别:
- DEFERRED:默认模式,首次访问数据库时获取锁。
- IMMEDIATE:阻止其他连接写入,但允许读取。
- EXCLUSIVE:阻止其他连接所有访问。
性能优化建议
- 批量操作时显式使用事务,减少重复提交的开销:
BEGIN; INSERT INTO table VALUES (...); INSERT INTO table VALUES (...); COMMIT;
- 避免长时间运行的事务,防止数据库锁竞争。
WAL 模式与事务
启用 WAL(Write-Ahead Logging)模式可提升并发性:
PRAGMA journal_mode=WAL;
此模式下读取和写入可并发进行,但需注意快照隔离的实现细节。
错误处理
事务中发生错误时需显式回滚。部分语言接口(如 Python 的 sqlite3
模块)支持上下文管理器自动处理:
with connection:cursor.execute("INSERT INTO table VALUES (?)", (data,))
退出时自动提交或回滚。
二.