T Sql 简明教程
T-SQL - Transactions
transaction 是针对数据库执行的一项工作单元。事务是由用户手动或由某种数据库程序自动以逻辑顺序执行的工作单元或工作序列。
事务是向数据库传播一项或多项更改的过程。例如,如果您正在创建记录或更新记录或从表中删除记录,那么您正在对表执行事务。控制事务以确保数据完整性并处理数据库错误非常重要。
实际上,您会将许多 SQL 查询合并到一个组中,并将它们全部作为一个事务的一部分一起执行。
Properties of Transactions
事务具有以下四个标准属性,通常用首字母缩写词 ACID 提到 -
-
Atomicity − 确保工作单元内的所有操作都已成功完成;否则,事务将中止于故障点,之前的操作将回滚至其原有状态。
-
Consistency − 确保数据库在成功提交事务后正确地更改状态。
-
Isolation − 使得事务能够彼此独立且透明地操作。
-
Durability − 确保在系统故障的情况下,已提交事务的结果或效果会持续存在。
COMMIT Command
COMMIT 命令用于将由事务调用的更改保存到数据库的事务命令。此命令将自上次 COMMIT 或 ROLLBACK 命令以来所有事务保存到数据库。
Example
可以将 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 Command
ROLLBACK 命令是用于撤消尚未保存到数据库的事务的事务命令。该命令只能用于自上次发出 COMMIT 或 ROLLBACK 命令以来撤消事务。
Example
可以将 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 Command
SAVEPOINT 是事务中的一个点,在该点上您可以将事务回滚到某个点,而无需回滚整个事务。
Syntax
以下是 SAVEPOINT 命令的语法。
SAVE TRANSACTION SAVEPOINT_NAME
此命令仅用于在事务语句中创建 SAVEPOINT。ROLLBACK 命令用于撤消一组事务。
以下是回滚到 SAVEPOINT 的语法。
ROLLBACK TO SAVEPOINT_NAME
在以下示例中,我们将从 CUSTOMERS 表中删除三条不同的记录。在每次删除之前,我们都必须创建一个 SAVEPOINT,以便我们可以在任何时间回滚到任何 SAVEPOINT,以将适当的数据返回到其原始状态。
Example
考虑包含以下记录的 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