- T-SQL 教程
- T-SQL - 首页
- T-SQL - 概述
- T-SQL - 数据类型
- T-SQL - 创建表
- T-SQL - 删除表
- T-SQL - INSERT 语句
- T-SQL - SELECT 语句
- T-SQL - UPDATE 语句
- T-SQL - DELETE 语句
- T-SQL - WHERE 子句
- T-SQL - LIKE 子句
- T-SQL - ORDER BY 子句
- T-SQL - GROUP BY 子句
- T-SQL - DISTINCT 子句
- T-SQL - 表连接
- T-SQL - 子查询
- T-SQL - 存储过程
- T-SQL - 事务
- T-SQL - 索引
- T-SQL - 函数
- T-SQL - 字符串函数
- T-SQL - 日期函数
- T-SQL - 数值函数
- T-SQL 有用资源
- T-SQL - 快速指南
- T-SQL - 有用资源
- T-SQL - 讨论
T-SQL - 事务
事务是针对数据库执行的一组工作单元。事务是按逻辑顺序完成的工作单元或序列,无论是用户手动完成的,还是某种数据库程序自动完成的。
事务是对数据库进行一项或多项更改的传播。例如,如果您正在创建记录、更新记录或从表中删除记录,那么您正在对表执行事务。控制事务对于确保数据完整性和处理数据库错误非常重要。
实际上,您会将许多 SQL 查询组合到一个组中,并将它们一起作为事务的一部分执行。
事务的特性
事务具有以下四个标准特性,通常用首字母缩写词 ACID 来表示:
原子性- 确保工作单元中的所有操作都成功完成;否则,事务在发生故障时中止,之前的操作回滚到其以前的状态。
一致性- 确保数据库在成功提交的事务后正确地更改状态。
隔离性- 使事务能够独立于彼此并对彼此透明地运行。
持久性- 确保已提交事务的结果或效果在系统故障的情况下仍然存在。
事务控制
以下命令用于控制事务:
COMMIT - 保存更改。
ROLLBACK - 回滚更改。
SAVEPOINT - 在事务组内创建回滚点。
SET TRANSACTION - 为事务命名。
事务控制命令仅与 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。在创建表或删除表时不能使用它们,因为这些操作会在数据库中自动提交。
为了在 MS SQL Server 中使用事务控制命令,我们必须使用“begin tran”或 begin transaction 命令开始事务,否则这些命令将不起作用。
COMMIT 命令
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 命令
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 是事务中的一个点,您可以在此处将事务回滚到某个点,而无需回滚整个事务。
语法
以下是 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 的语法。
SET TRANSACTION ISOLATION LEVEL <Isolationlevel_name>