面试题答案
一键面试1. 常用事务类型
- 自动提交事务:SQLite默认以自动提交模式运行。在这种模式下,每一条SQL语句都被当作一个独立的事务,执行完一条语句后立即提交。例如执行一条简单的
INSERT
语句,语句执行完成后,数据就永久保存到数据库中。 - 显式事务:用户通过特定命令来控制事务的开始、提交和回滚。这种方式允许将多条SQL语句组合成一个逻辑单元,要么全部成功提交,要么全部回滚。
2. 开启、提交和回滚事务
- 开启事务:使用
BEGIN TRANSACTION
语句来开始一个显式事务。例如:
BEGIN TRANSACTION;
- 提交事务:当事务中的所有操作都成功完成后,使用
COMMIT
语句将事务中的所有更改永久保存到数据库中。例如:
COMMIT;
- 回滚事务:如果在事务执行过程中出现错误或需要取消事务,使用
ROLLBACK
语句将数据库状态恢复到事务开始之前。例如:
ROLLBACK;
3. 系统崩溃后确保数据一致性
- 回滚日志:SQLite使用回滚日志(rollback journal)来记录事务对数据库所做的更改。在事务开始时,SQLite会创建一个回滚日志文件。在事务执行过程中,对数据库的每一个修改操作都会在回滚日志中记录相应的逆操作。当系统崩溃后,SQLite在重启时会检查回滚日志。如果发现有未完成的事务,SQLite会根据回滚日志中的记录执行回滚操作,撤销未完成事务对数据库的更改,从而确保数据一致性。
- 预写式日志(WAL)模式(可选):从SQLite 3.7.0开始引入了预写式日志模式。在WAL模式下,事务不是直接修改数据库文件,而是将修改写入到一个日志文件(WAL文件)中。当系统崩溃时,下次启动时SQLite会重放WAL文件中的记录,将未完成的事务回滚,并将已提交的事务重新应用,以此保证数据一致性。同时,WAL模式允许多个读操作并发执行,因为读操作不需要锁定数据库文件,只需读取WAL文件的当前状态即可。