事务是逻辑上组织的工作块或序列,可以由DBMS手动或机械地完成。如果你创建、修改或删除表中的数据,你就是在表上执行事务。控制事务对于维护数据完整性和处理数据库问题至关重要。
在SQLite中,事务是一组T-SQL命令,作为一个唯一的T-SQL命令执行。如果在执行这些SQLite命令时发生错误,事务将被整体回滚。一般来说,SQLite处于自动提交模式,这意味着它自动为每条命令创建一个事务,处理它,并将更改提交给数据库。
在这篇文章中,我们将演示如何实现SQLite事务,以保证数据的完整性和可靠性。
SQLite事务的特性
SQLite是一个事务性数据库,这意味着所有的更新和搜索都是原子的、一致的、隔离的和持久的(ACID)。下面所说的四个标准特性,通常缩写为ACID,都存在于事务中。
原子性。一个原子性的事务需要完成过程中的单一步骤。它表示一个修改不能被分割成更小的组件。当一个事务处于COMMIT模式时,要么执行完整的事务,要么不执行。
一致性。事务必须保证数据库从一个合法状态改变到下一个状态。当一个事务发起并执行更新数据的命令时,数据库会变得不一致。然而,当对事务执行COMMIT和ROLLBACK时,数据库必须保持一致。
隔离。会话的未决事务必须与其他会话隔离。当一个会话发起一个事务并使用INSERT或UPDATE命令来修改数据时,这些修改只能被当前的操作访问,而不能被其他人访问。另一方面,其他用户在事务开始后所做的修改,对于当前用户来说,永远不应该是明显的。
**持久性。**如果一个事务被正确地提交,在停电或程序崩溃的情况下,数据库中的变化必须是永久性的。如果程序在事务提交前首先终止,更新就不应该持续存在。
如何在SQLite中执行交易?
假设我们希望规范这种事务,以保持数据的一致性并处理数据库故障。我们可以停止自动提交模式,并根据我们的需要,通过使用以下指令明确地启动事务。
- BEGIN:这是事务开始的地方。
- COMMIT。通过SQLite的这个术语,我们将提交事务,这意味着它将把所有的修改保存到数据库中。
- ROLLBACK:整个事务将被逆转。
注意,只有DML操作INSERT、UPDATE和DELETE使用事务控制指令。它们不能用于提取表,因为数据库会及时提交这些操作。
创建用于执行交易的SQLite表
为了执行事务,首先,我们必须创建一个表。在图中,你可以注意到,我们已经创建了一个名为 "person_accounts "的表。该表有四个列,分别是person_id、person_name、account_number和account_balance及其数据类型。
CREATE TABLEperson\_accounts(
person\_idINT PRIMARY KEY,
person\_nameCHAR(10),
account\_numberINT,
account\_balanceFLOAT
);

这里,我们用SQLite的插入命令插入了一条记录。
INSERT INTOperson\_accountsVALUES (1, 'Ayat', 171636460, 5000);
INSERT INTOperson\_accountsVALUES (2, 'Muneeb', 673201984, 8000 );
INSERT INTOperson\_accountsVALUES (3, 'Wahaj',112603502, 4000);
INSERT INTOperson\_accountsVALUES (4, 'Maya', 501738449, 7500);

该表可按以下表格格式查看。

例1:在SQLite中用BEGIN命令执行事务
BEGIN TRANSACTION,或者BEGIN命令,可以用来启动事务。然而,如果数据库被终止或发生错误,事务将ROLLBACK。
最初,我们在TRANSACTION术语中加入了一个BEGIN术语。然后,我们有一个UPDATE指令,它是在person_id等于 "2 "和person_id等于 "4 "的account_balance列上操作的。由于我们已经给出了一个COMMIT指令,事务在这里终止。
BEGIN TRANSACTION;
UPDATEperson\_accounts
SETaccount\_balance\=account\_balance\- 1000
WHEREperson\_id\= 2;
UPDATEperson\_accounts
SETaccount\_balance\=account\_balance+ 500
WHEREperson\_id\= 4;
COMMIT;

在表 "person_accounts "上成功执行了转换,"account_balance "字段在指定的person_id上被更新。

例2:在SQLite的COMMIT命令上执行事务
COMMIT命令是一个事务性命令,它可以保存由事务引发的对数据库的修改。COMMIT命令保留了自上一次COMMIT或ROLLBACK指令以来的所有数据库事务。
在下面的例子中,我们用BEGIN TRANSACTION这个词第一次启动了事务。在这之后,我们有插入命令,在表 "person_accounts "中插入了一条新记录。最后我们给出了一个COMMIT命令,它终止了事务,并在给定的表中保存了变化。
BEGIN TRANSACTION;
INSERT INTOperson\_accounts(person\_id,person\_name,account\_number,account\_balance)
VALUES(3, 'Wahaj',112603502, 4000);
COMMIT;

表的视图显示新的记录在下表中。

例3:在SQLite中对ROLLBACK命令执行事务
ROLLBACK是一条事务性命令,用于解除尚未提交给数据库的事务。
在这里,我们对表 "persons_accounts "进行了DELETE操作,它与给定的account_number字段的条件匹配。在这之后,我们给出了ROLLBACK指令,它也将终止这里的事务,但不保存我们对表进行的修改。
BEGIN TRANSACTION;
DELETE FROMperson\_accountsWHEREaccount\_number=112603502;
DELETE FROMperson\_accountsWHEREaccount\_number=171636460;
ROLLBACK;

在执行ROLLBACK操作后,表内的值和字段与之前一样。

总结
读完这篇文章后,我们希望你对SQLite事务有一个清晰的掌握。我们谈到了SQLite的事务属性和事务控制。还实现了几个SQLite的例子,描述了具有COMMIT和ROLLBACK功能的事务行为。这就是关于SQLite事务的所有知识,包括COMMIT和ROLLBACK事务信息。