gpt4 book ai didi

sql - 我应该使用哪种锁定提示 (T-SQL)?

转载 作者:行者123 更新时间:2023-12-02 05:22:22 25 4
gpt4 key购买 nike

我想实现如下所示的原子事务:

BEGIN TRAN A

SELECT id
FROM Inventory
WITH (???)
WHERE material_id = 25 AND quantity > 10

/*
Process some things using the inventory record and
eventually write some updates that are dependent on the fact that
that specific inventory record had sufficient quantity (greater than 10).
*/

COMMIT TRAN A

问题是,还有其他事务发生,消耗了我们库存中的数量,因此在选择记录和在事务 A 中写入更新之间,该记录可能会成为无效选择,因为它的数量可能已降低低于 WHERE 子句中的阈值。

所以问题是我应该在WITH子句中使用什么锁定提示来防止在完成更新并提交事务之前更改所选库存记录?

编辑:因此,感谢 John,一个好的解决方案似乎是将事务隔离级别设置为 REPEATABLE READ。这将确保“在当前事务完成之前,没有其他事务可以修改当前事务已读取的数据。”

最佳答案

实际上,设置事务隔离级别可能比使用查询提示更好。

以下来自联机丛书的引用资料提供了每个不同隔离级别的详细信息。

http://msdn.microsoft.com/en-us/library/ms173763.aspx

这是一篇很好的文章,解释了 SQL Server 中各种类型的锁定行为并提供了示例。

http://www.sqlteam.com/article/introduction-to-locking-in-sql-server

关于sql - 我应该使用哪种锁定提示 (T-SQL)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/497049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com