Sql server 在现代数据库系统中,长时间锁定记录是常见的做法吗?

Sql server 在现代数据库系统中,长时间锁定记录是常见的做法吗?,sql-server,locking,firedac,Sql Server,Locking,Firedac,问:在现代数据库系统中,长时间锁定记录是否是常见的做法 我的理解是锁定数据库中的记录乐观或悲观通常在事务期间的很短时间内 我现在使用的软件可以长时间锁定记录: 在用户登录软件的整个过程中,在ACTIVE_USERS(活动用户)表中对登录用户的记录保持锁定 假设用户A正在处理一个文件。与该文件对应的记录将被锁定,直到用户A保存该文件或退出该文件。因此,如果同事、用户B尝试处理同一个文件,则会出现一个弹出窗口,显示“您无法处理此文件,因为用户a正在处理此文件” 我正在为一家公司工作,以实现与Micr

问:在现代数据库系统中,长时间锁定记录是否是常见的做法

我的理解是锁定数据库中的记录乐观或悲观通常在事务期间的很短时间内

我现在使用的软件可以长时间锁定记录:

在用户登录软件的整个过程中,在ACTIVE_USERS(活动用户)表中对登录用户的记录保持锁定

假设用户A正在处理一个文件。与该文件对应的记录将被锁定,直到用户A保存该文件或退出该文件。因此,如果同事、用户B尝试处理同一个文件,则会出现一个弹出窗口,显示“您无法处理此文件,因为用户a正在处理此文件”


我正在为一家公司工作,以实现与Microsoft SQL Server的兼容性,该公司希望更改最小化:因此我需要实现这样一种锁定机制。我黑了一些正在进行最小测试项目的东西,但我不确定它是否符合行业和MSSQL的标准…

这是一个有点长的评论

将数据库锁定机制用于此应用程序级锁定似乎不同寻常。数据库锁可能位于行、页或表级别,它们也会影响索引,因此可能会产生意外的副作用。显然,锁的激增也使死锁的可能性大大增加

通常,应用程序锁将在记录级别处理。使用记录中的某种标志,应用程序将确保只有一行可以访问该文件


我会说,这可能会奏效。但我绝不会这样设计一个系统,我会对意外的后果保持警惕。

我希望用户永远不要去吃午饭:-。你说的锁定记录是什么意思?这实际上是一个RDBMS锁还是某种自我管理的锁标志?我是否正确地理解了这一点:这个项目将在SQL Server上运行,其影响应该尽可能小?即使一个概念很奇怪,新的解决方案也应该尽可能接近?您可以阅读有关而不是触发器的信息。这将允许您自己实现这样的逻辑…在登录时锁定记录并不常见。我个人会避免锁定,即使记录开始被某个前端编辑器编辑。相反,我将创建一个单独的表跟踪编辑器,并让记录仅由事务锁定。不,这是非常不寻常的,并且是给日常维护带来痛苦的一种确定方式。我会像躲避瘟疫一样躲避它。见下面的Gordon Linoff答案。同意!数据库锁用于处理启动器的酸性兼容性,而不是应用程序级逻辑。可能是内存中的数据结构?