确保 T-SQL 中原子且可靠的行更新
在数据管理领域,确定是否存在执行更新之前的行。这在数据完整性和原子性至关重要的场景中尤其重要。本文探讨了一种可靠的方法来检查表中是否存在行,如果不存在,则将其插入,所有这些都在单个事务的范围内。
原子且可靠的行更新
考虑一个必须防止超额预订并保证每次预订的可靠性的预订系统。实现此功能需要原子且可靠的方法,确保两个操作(更新或插入)成功执行或回滚,从而保持数据完整性。
检查代码
提供的代码片段尝试更新 Bookings 表中的一行。但是,如果该行不存在,则无法正确处理该场景。此外,查询使用 @@ROWCOUNT 检查现有行会引入数据不一致问题。
改进的代码实现
要纠正这些问题并确保所需的行为,提供了修改后的代码下面:
-- Initiate transaction (assuming SQL Server) BEGIN TRANSACTION -- Attempt to update row UPDATE Bookings SET TicketsBooked = TicketsBooked + @TicketsToBook WHERE FlightId = @Id AND TicketsMax >= (TicketsBooked + @TicketsToBook) -- Check if row updated IF @@ROWCOUNT = 0 BEGIN -- Insert new row (if row doesn't exist) INSERT INTO Bookings ... (omitted) END -- Transaction completion (commit or rollback based on result) IF @@ERROR = 0 BEGIN COMMIT TRANSACTION SELECT 1 AS Result -- Return true (if transaction committed) END ELSE BEGIN ROLLBACK TRANSACTION SELECT 0 AS Result -- Return false (if transaction failed) END
说明
此增强的代码包括几个重要的修改:
以上是如何确保T-SQL中原子且可靠的行更新?的详细内容。更多信息请关注PHP中文网其他相关文章!