MST

星途 面试题库

面试题:SQLite事务生命周期基础理解

请阐述SQLite事务从开始到结束的完整生命周期,包括常见的开启、提交和回滚操作,以及它们在不同场景下的使用方式。
38.4万 热度难度
数据库SQLite

知识考点

AI 面试

面试题答案

一键面试

1. 事务生命周期概述

SQLite 事务从开启到结束,经历开启事务、执行一系列数据库操作(如插入、更新、删除等),最后通过提交(成功时)或回滚(失败时)来结束事务。

2. 开启事务

  • 隐式开启:在某些情况下,SQLite 会隐式开启事务。例如,当执行 INSERT, UPDATE, DELETE 等修改数据的语句时,如果当前没有活动事务,SQLite 会自动开启一个事务。这种隐式事务在语句执行完毕后会自动提交。
  • 显式开启:使用 BEGINBEGIN TRANSACTION 语句显式开启一个事务。这允许你将多个数据库操作组合成一个逻辑单元。例如:
BEGIN;
INSERT INTO users (name, age) VALUES ('Alice', 30);
UPDATE users SET age = 31 WHERE name = 'Alice';
COMMIT;

3. 提交事务

  • 操作:使用 COMMIT 语句来提交事务。当调用 COMMIT 时,事务中所有已执行的数据库操作将被永久保存到数据库文件中。例如:
BEGIN;
INSERT INTO products (product_name, price) VALUES ('Widget', 10.99);
UPDATE products SET price = 11.99 WHERE product_name = 'Widget';
COMMIT;
  • 适用场景:当事务中的所有操作都成功完成,且希望将这些更改持久化到数据库时,使用 COMMIT。比如在一个转账操作中,从账户 A 扣除金额和向账户 B 添加金额都成功执行后,提交事务使更改生效。

4. 回滚事务

  • 操作:使用 ROLLBACK 语句来回滚事务。ROLLBACK 会撤销自事务开始以来所有已执行的数据库操作,将数据库恢复到事务开始前的状态。例如:
BEGIN;
DELETE FROM orders WHERE order_id = 123;
-- 发现操作有误,回滚
ROLLBACK;
  • 适用场景:当事务执行过程中发生错误(如违反唯一性约束、数据类型不匹配等),或者业务逻辑判断某些操作不应该继续执行时,使用 ROLLBACK。例如,在一个复杂的订单处理事务中,如果库存检查发现商品库存不足,就回滚整个订单创建事务,避免错误订单数据残留。

5. 自动提交模式

  • SQLite 默认处于自动提交模式,即每条单独的 SQL 语句都被视为一个单独的事务。例如,执行一条 INSERT 语句时,SQLite 会隐式开启一个事务,执行完 INSERT 后立即提交该事务。但在需要确保多个操作原子性(要么全部成功,要么全部失败)时,需要显式开启事务并控制提交或回滚。