当前位置: 首页 > 面试题库 >

SQL Server如何处理UPDATE事务?

慕铭
2023-03-14
问题内容

我们有一个用于生成唯一数字键的表。这些键然后用作其他表中的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呼叫吗?


问题答案:

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

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



 类似资料:
  • 当使用事务处理时,需要创建 Session 对象。在进行事务处理时,可以混用 ORM 方法和 RAW 方法,如下代码所示: func MyTransactionOps() error { session := engine.NewSession() defer session.Close() // add Begin() before any action

  • 启动事务 $this->db->start(); Swoole::$php->db('slave2')->start(); 提交事务 $this->db->commit(); Swoole::$php->db('slave2')->commit(); 回滚事务 $this->db->rollback(); Swoole::$php->db('slave2')->rollback();

  • 在2.0.0之后我们已经支持事务嵌套了,是通过事务等级去实现的。 1. 开始事务 $model->beginTransaction(); 2. 事务提交 $model->commit(); 3. 事务回滚 $model->rollback();

  • 事务处理(transaction processing) 可以用来维护数据的完整性,保证SQL的操作要么完全执行,要么完全不执行,如果发生错误就进行撤销。 保证数据的完整性。 保证数据不受外影响。 事务处理的几道术语 事务(transaction) 一组SQL语句 退回(rollback)撤销执行SQL语句的过程 提交(commit) 将为执行的SQL语句写入数据库表 保留点(savepoint)

  • 如何使事件在ReactJS中工作?它应该在按下回车键(keyCode=13)时发出警报。

  • 本文向大家介绍如何处理jQuery AJAX成功事件?,包括了如何处理jQuery AJAX成功事件?的使用技巧和注意事项,需要的朋友参考一下 要处理jQuery AJAX成功事件,请使用方法。只要AJAX请求成功完成,ajaxSuccess(callback)方法就会附加一个要执行的函数。这是一个Ajax事件。 这是此方法使用的所有参数的描述- callback- 要执行的功能。事件对象,XML