一、事务简介
事务是数据库操作中的一组逻辑单元,用于确保数据的完整性和一致性。它遵循 ACID 原则:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
二、基本语法
-
开始事务
BEGIN TRANSACTION;
-
提交事务
COMMIT TRANSACTION;
-
回滚事务
ROLLBACK TRANSACTION;
三、简单示例
假设有一个订单表 Orders 和一个库存表 Inventory,需要在插入订单的同时减少库存。以下是事务的使用示例:
-- 开始事务
BEGIN TRANSACTION;
BEGIN TRY
-- 插入订单
INSERT INTO Orders (OrderID, ProductID, Quantity) VALUES (1, 101, 5);
-- 减少库存
UPDATE Inventory SET Quantity = Quantity - 5 WHERE ProductID = 101;
-- 提交事务
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
-- 如果发生错误,回滚事务
ROLLBACK TRANSACTION;
PRINT 'Transaction failed.';
END CATCH;
四、隔离级别
SQL Server 提供了多种事务隔离级别,用于控制并发事务之间的可见性和锁行为。默认隔离级别是 READ COMMITTED。
设置隔离级别
SET TRANSACTION ISOLATION LEVEL [隔离级别];
常见隔离级别
- READ COMMITTED:默认级别,只能读取已提交的数据。
- READ UNCOMMITTED:允许读取未提交的数据(脏读)。
- REPEATABLE READ:保证在事务中多次读取同一数据时结果一致。
- SERIALIZABLE:最高隔离级别,事务完全隔离,避免并发问题。
五、注意事项
- 事务大小:尽量保持事务的大小适中,避免长时间锁定资源。
- 错误处理:使用 TRY…CATCH 块捕获错误并回滚事务。
- 隔离级别:根据业务需求选择合适的隔离级别,避免过度锁定。