SQLite-高级-事务(Transaction)

事务(Transaction)

事务(Transaction)是一个对数据库执行工作单元。事务(Transaction)是以逻辑顺序完成的工作单位或序列,可以是由用户手动操作完成,也可以是由某种数据库程序自动完成。

事务(Transaction)是指一个或多个更改数据库的扩展。例如,如果您正在创建一个记录或者更新一个记录或者从表中删除一个记录,那么您正在该表上执行事务。重要的是要控制事务以确保数据的完整性和处理数据库错误。

实际上,您可以把许多的 SQLite 查询联合成一组,把所有这些放在一起作为事务的一部分进行执行。

事务的属性

事务(Transaction)具有以下四个标准属性,通常根据首字母缩写为 ACID:

  • 原子性(Atomicity):确保工作单位内的所有操作都成功完成,否则,事务会在出现故障时终止,之前的操作也会回滚到以前的状态。

  • 一致性(Consistency):确保数据库在成功提交的事务上正确地改变状态。

  • 隔离性(Isolation):使事务操作相互独立和透明。

  • 持久性(Durability):确保已提交事务的结果或效果在系统发生故障的情况下仍然存在。

事务控制

使用下面的命令来控制事务:

  • BEGIN TRANSACTION:开始事务处理。

  • COMMIT:保存更改,或者可以使用 END TRANSACTION 命令。

  • ROLLBACK:回滚所做的更改。

事务控制命令只与 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。他们不能在创建表或删除表时使用,因为这些操作在数据库中是自动提交的。

----------------------------------------------------------------------

举例:

1:开启事物--事物处理--事物提交

sqlite> BEGIN TRANSACTION;
sqlite> INSERT INTO COMPANY VALUES(6,'LiF',45,'Home',600000.0);
sqlite> select*from COMPANY;
1|LiA|20|China|100000.0
2|LiB|25|America|200000.0
3|LiC|30|earth|300000.0
5|LIE|40|Ground|500000.0
6|LiF|45|Home|600000.0
sqlite> COMMIT TRANSACTION;
sqlite> select*from COMPANY;
1|LiA|20|China|100000.0
2|LiB|25|America|200000.0
3|LiC|30|earth|300000.0
5|LIE|40|Ground|500000.0
6|LiF|45|Home|600000.0

-------------------------------------------------------------------

2:开启事物--事物处理--事物处理回滚(事物处理取消)

sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE COMPANY(            ID        INT   PRIMARY KEY NOT NULL,           NAME      TEXT  NOT NULL,           AGE       INT   NOT NULL,           ADDRESS   TEXT  ,           SALARY    REAL  );
INSERT INTO "COMPANY" VALUES(1,'LiA',20,'China',100000.0);
INSERT INTO "COMPANY" VALUES(2,'LiB',25,'America',200000.0);
INSERT INTO "COMPANY" VALUES(3,'LiC',30,'earth',300000.0);
COMMIT;
sqlite> BEGIN TRANSACTION;    
sqlite> INSERT INTO COMPANY VALUES(4,'LiC',35,'Air',400000.0);
sqlite> select*from COMPANY;
1|LiA|20|China|100000.0
2|LiB|25|America|200000.0
3|LiC|30|earth|300000.0
4|LiC|35|Air|400000.0
sqlite> ROLLBACK TRANSACTION;
sqlite> select*from COMPANY;
1|LiA|20|China|100000.0
2|LiB|25|America|200000.0
3|LiC|30|earth|300000.0
sqlite> 

posted @ 2015-11-16 17:29  cuiz_book  阅读(668)  评论(0编辑  收藏  举报