原文转载:SQLite事务(Transcation)/BUNOOB.COM
- 概述:SQLite事务(Transaction)
- 事务是一个对数据库执行工作单元,是以逻辑顺序完成的工作单位或序列,可以由用户手动操作完成,也可由数据库程序自动完成。
- 事务是指一个或多个更改数据库的扩展。重要的是要控制事务以确保数据的完整性和处理数据库错误。
- 将许多SQLite查询联合成一组,并作为事务的一部分进行执行。
- 事务的属性
- 原子性(Atomicity):确保工作单位内的所有操作都成功完成,否则,事务会在出现故障时终止,之前的操作也会回滚到以前的状态。
- 一致性(Consistency):确保数据库在成果提交的事务上正确的改变状态。
- 隔离性(lsolation):使事务操作相互独立和透明。
- 持久性(Durability):确保已提交事务的结果或效果在系统发生故障的情况下仍存在。
- 事务控制指令
- BEGIN TRANSACTION:开始事务处理,会持续进行直到遇到下一个COMMIT或ROLLBACK命令。在数据库关闭或出现错误时,仍会回滚。
BEGIN; OR BEGIN TRANSCATION;
- COMMIT:保存更改,或者可以使用END TRANSACTION命令
COMMIT; OR END TRANSCATION
- ROLLBACK:回滚所做的更改
ROLLBACK;
- 事务控制指令只能和DML命令INSERT、UPDATA、DELETE结合使用。不能再创建表和删除表时使用,因为这些操作在数据库中是自动提交的。
- 使用流程,简单的代码结构及与SQL的DML结合
sqlite3* db; char* errMSG=0; int rc; rc=sqlite3_open("dt.db",&db); if(rc){ ERROR BLOCK; } sqlite3_exec(db,"BEGIN;",0,0,&errMSG); ///开启事务 ///database MDL操作。 if(MDL执行成功(flag)) { sqlite3_exec(db,"COMMIT",0,0,0); ///提交事务 }else { sqlite3_exec(db,"ROLLBACK",0,0,0) ///回滚 }