📅  最后修改于: 2020-12-29 04:52:46             🧑  作者: Mango
事务是针对数据库执行的工作单元。事务是按逻辑顺序完成的单位或工作顺序,无论是由用户手动完成还是由某种数据库程序自动完成。
事务是将一个或多个更改传播到数据库。例如,如果要创建记录或更新记录或从表中删除记录,那么您正在表上执行事务。控制事务以确保数据完整性和处理数据库错误很重要。
实际上,您会将许多SQL查询组成一个组,并将它们全部作为事务的一部分一起执行。
事务具有以下四个标准属性,通常由首字母缩写ACID引用-
原子性-确保工作单元内的所有操作均成功完成;否则,事务将在失败点中止,并且先前的操作将回滚到其先前的状态。
一致性-确保数据库在成功提交事务后正确更改状态。
隔离-使事务能够独立运行并且彼此透明。
持久性-确保在系统故障的情况下持久化已提交事务的结果或效果。
以下命令用于控制交易-
COMMIT-保存更改。
ROLLBACK-回滚更改。
SAVEPOINT-在要回滚的事务组内创建点。
SET TRANSACTION-在交易上放置名称。
事务控制命令仅与DML命令INSERT,UPDATE和DELETE一起使用。在创建表或删除表时不能使用它们,因为这些操作是在数据库中自动提交的。
为了在MS SQL Server中使用事务控制命令,我们必须以“ begin tran”开始事务或开始事务命令,否则这些命令将不起作用。
COMMIT命令是用于将事务调用的更改保存到数据库的事务性命令。自上一个COMMIT或ROLLBACK命令以来,此命令将所有事务保存到数据库中。
以下是COMMIT命令的语法。
COMMIT;
考虑具有以下记录的CUSTOMERS表。
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
下面的命令示例将从年龄= 25的表中删除记录,然后在数据库中提交更改。
Begin Tran
DELETE FROM CUSTOMERS
WHERE AGE = 25
COMMIT
结果,将删除表中的两行,并且SELECT语句将产生以下输出。
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
3 kaushik 23 Kota 2000.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
ROLLBACK命令是用于撤消尚未保存到数据库的事务的事务性命令。自从上次发出COMMIT或ROLLBACK命令以来,此命令只能用于撤消事务。
以下是ROLLBACK命令的语法。
ROLLBACK
考虑具有以下记录的CUSTOMERS表。
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
以下命令示例将从年龄= 25的表中删除记录,然后在数据库中回滚更改。
Begin Tran
DELETE FROM CUSTOMERS
WHERE AGE = 25;
ROLLBACK
结果,删除操作将不会影响表,并且SELECT语句将产生以下结果。
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
SAVEPOINT是事务中的一个点,您可以将事务回滚到特定点而无需回滚整个事务。
以下是SAVEPOINT命令的语法。
SAVE TRANSACTION SAVEPOINT_NAME
该命令仅在事务语句之间创建SAVEPOINT时起作用。 ROLLBACK命令用于撤消一组事务。
以下是回滚到SAVEPOINT的语法。
ROLLBACK TO SAVEPOINT_NAME
在下面的示例中,我们将从CUSTOMERS表中删除三个不同的记录。我们将必须在每次删除之前创建一个SAVEPOINT,以便我们可以随时回滚到任何SAVEPOINT,以将适当的数据返回到其原始状态。
考虑具有以下记录的CUSTOMERS表-
ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
以下是一系列操作-
Begin Tran
SAVE Transaction SP1
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 1
1 row deleted.
SAVE Transaction SP2
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 2
1 row deleted.
SAVE Transaction SP3
Savepoint created.
DELETE FROM CUSTOMERS WHERE ID = 3
1 row deleted.
已经发生了三个删除操作,但是,我们改变了主意,决定回滚到我们标识为SP2的SAVEPOINT。由于SP2是在第一次删除后创建的,因此最后两个删除都被撤消-
ROLLBACK Transaction SP2
Rollback complete.
请注意,自从我们回滚到SP2以来,仅发生了第一次删除。
SELECT * FROM CUSTOMERS
已选择6行。
ID NAME AGE ADDRESS SALARY
2 Khilan 25 Delhi 1500.00
3 kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 MP 4500.00
7 Muffy 24 Indore 10000.00
SET TRANSACTION命令可用于启动数据库事务。此命令用于指定后续事务的特征。
以下是SET TRANSACTION的语法。
SET TRANSACTION ISOLATION LEVEL