一尘不染

SQL Server如何处理UPDATE事务?

sql

我们有一个用于生成唯一数字键的表。这些键然后用作其他表中的PrimaryKey。表结构是这样的:

TableName     VARCHAR
CurrentKey    INT

所以我们在这个表中有数据

TableName   Customers
CurrentKey  400

所以,当我们需要下一个主键表中Customers我们可以得到CurrentKey从这个表,其中TableNameCustomers,它会给我们400,我们的增量(400
+ 1),它和我们更新表也是这个关键。所以我们CurrentKey现在是401。

我们用于此目的的sql是:

SQL1:

DECLARE  @CurrentKey INT
UPDATE  myTable 
SET @CurrentKey = CurrentKey = CurrentKey + 1
WHERE   TableName = @TableName

我的问题是,是否需要锁定表,以便如果多个用户同时调用此键,则键可能不会重复?我确定SQL Server将不允许重复的数据,但我不知道该如何…用表锁查询:

SQL2

BEGIN TRANSACTION
    DECLARE  @CurrentKey INT
    UPDATE  myTable WITH (TABLOCKX)
    SET @CurrentKey = CurrentKey = CurrentKey + 1
    WHERE   TableName = @TableName
END TRANSACTION

有人可以解释一下SQL Server如何处理UPDATE呼叫吗?


阅读 213

收藏
2021-03-08

共1个答案

一尘不染

每个SQL语句都在事务中运行,并且update语句始终使用锁来保护其更新。SQL Server不允许您读取半修改的行(某些例外情况是大于8k的数据。)

您的第一句话应该没问题。

2021-03-08