SQLite 是一个事务性(transactional)的数据库,所有的修改和查询均是原子化的(Atomic)、一致的(Consistent)、独立的(Isolation)、持久的(Durable),简称 ACID。
-
原子化的:
数据库事务应该是原子化的。它表示一个修改不可以被分解为更小的部分。当你提交一个事务后,该事务要么完整被执行,要么完全没有被执行 -
一致的:
一个事务必须保证将数据库从一个有效状态转移至另一个有效状态。当一个事务开始、并执行了一个修改数据的数据库开始变得不一致,但当整个事务完成亦或回滚后,事务应该保证数据库的一致性。 -
独立的:
一个会话正在执行的事务,必须对其它会话保持独立。当一个会话开始一个事务,并执行INSERT
或UPDATE
语句修改数据时,这些修改仅能被当前会话看到,其它会话不能看到。换句话说,若当前会话已经开始了一个事务,那么在这之后,其它会话对数据库做出的修改,不应该被当前会话看见。 -
持久性:
若一个事务成功执行,那么无论环境状态,比如电源事故或程序崩溃,该事务在数据库中必须为永存的。反过来说,若程序在事务完成前崩溃,那么任何修改都不应该生效。
默认情况下,SQLite 处于自动提交模式。也就是说,对于每个命令,SQLite 会自动对该事务执行 启动、处理、提交的流程。
要明确开始一次事务,使用如下的步骤:
首先通过如下的语句开始一个事务
BEGIN TRANSACTION; -- 可以简写为 BEGIN;
在执行完上面的语句之后,该事务会保持开启状态,直到该事务被明确地提交或回滚。
之后,可以发送 select 或 update 数据库。注意,修改仅在当前会话中可见。
最后,使用下面的语句提交修改
COMMIT TRANSACTION; -- 可以简写为 COMMIT;
若你不希望保存修改,使用下面的语句回滚:
ROLLBACK TRANSACTION; -- 可以简写为 ROLLBACK;