这个问题一直被很多人关注,基本上得到的答案是两种倾向,一种是锁一种是给记录打标记(也就是update)。对于应用来说,我并不提倡人为给记录加锁,这样会惹来很多麻烦,况且锁并不能解决所有问题,如果你有这方面好的经验我们可以进一步交流。
而update的过程会自动加锁,这个给我们带来和极大便利,但该方法一直不被人们认可的原因是效率:比如打标记怎么打,是否需要每个终端给数据印上各自不同的标志才能避免冲突;是否需要嵌套查询等等..
为了充分提高并发效率,我们可以使用rowlock和readpast来降低锁争,使用top子句来直接更新当前任务执行者需要的数据,使用output子句直接输出结果来代替嵌套查询。必要的情况下可以在表中加适当的索引。
我们来看一下具体代码
set
nocount
on
use
tempdb
go
if
(object_id
('tb'
) is
not
null
)
drop
table
tb
go
create
table
tb
(id
int
identity
(1
,
1
),
name
varchar
(10
),
tag
int
default
0
)
insert
into
tb
(name
) select
'a'
insert
into
tb
(name
) select
'b'
insert
into
tb
(name
) select
'c'
insert
into
tb
(name
) select
'd'
insert
into
tb
(name
) select
'e'
go
update
top
(2
) tb
with
(rowlock
,
readpast
) set
tag
=
1
output
inserted
.
id
,
inserted
.
name
where
tag
=
0
go
update
top
(2
) tb
with
(rowlock
,
readpast
) set
tag
=
1
output
inserted
.
id
,
inserted
.
name
where
tag
=
0
go
update
top
(2
) tb
with
(rowlock
,
readpast
) set
tag
=
1
output
inserted
.
id
,
inserted
.
name
where
tag
=
0
go
set
nocount
off
/*
id name
----------- ----------
1 a
2 b
id name
----------- ----------
3 c
4 d
id name
----------- ----------
5 e
*/
如果你有更好的建议,我们不妨探讨一下。
分享到:
相关推荐
在SQL Server 2005中,查询独占是一种确保数据在处理时不会被其他并发操作干扰的技术。这种机制在处理关键数据或者执行敏感操作时显得尤为重要,因为它可以避免数据的不一致性。然而,实现查询独占并不是一个简单的...
《Expert SQL Server Transactions and Locking》是一本专为SQL Server数据库管理员和开发人员编写的权威指南,涵盖了事务处理和锁定机制这两个核心主题。这本书的源码提供了深入理解这些概念的实际示例,对于学习和...
SQL Server 2005的`TOP`功能是一种非常实用的查询操作,允许用户从结果集中选取指定数量的记录。这个功能在数据检索、更新和删除时特别有用,尤其是当处理大量数据时,可以有效地控制返回或操作的数据量。 1. `...
综上所述,SQLcampo可能是一个模拟SQL Server 2019并发控制特性的工具或理念,强调在不产生独占性情况下的高效数据库管理。理解并掌握这些并发控制策略对于开发高效、稳定的数据库应用程序至关重要。通过合理利用SQL...
在SQL Server中,有多种类型的锁,包括共享锁(S锁)和独占锁(X锁)。共享锁用于读取数据,而独占锁用于修改数据。当一个事务持有一个锁并请求另一个事务已经持有的锁时,就会发生死锁。 在上述示例中,我们创建了...
- Microsoft SQL Server:微软公司开发的数据库系统,与Windows操作系统兼容性好。 - PostgreSQL:开源、功能强大的数据库系统,支持多种数据类型。 6. 数据库备份与恢复: - 备份策略:完整备份、增量备份、...
视图是基于SQL查询结果的虚拟表,可以通过创建视图来简化复杂的查询操作。 **详细解释:** 第十二个单选题询问了如何创建统计每个系的学生人数的视图。正确的答案是A,“CREATE VIEW v1 AS SELECT 所在系, COUNT(*)...
在SQL Server数据库管理系统中,死锁是一个常见的问题,它发生在两个或多个进程因为争夺资源而陷入互相等待的状态,无法继续执行。理解死锁的原因和解决方法对于确保数据库系统的正常运行至关重要。 **一、死锁的...
全国计算机三级考试数据库.pdf主要涵盖了数据库技术的基础知识,包括关系代数、数据库完整性约束、数据库管理系统、网络协议、数据模型、SQL查询优化、事务处理、死锁预防、数据存储、抽象数据类型、操作系统服务、...
7. 关系数据库管理系统(RDBMS)如Oracle、MS SQL SERVER和DB2提供了关系数据的管理和查询功能。IMS(Information Management System)虽然也是数据库系统,但它主要基于层次模型。 8. 在操作系统中,为了解决独占...
在设备管理中,为提高设备利用率,引入了虚拟设备的概念,通过高速设备模拟低速设备,实现独占设备到共享设备的转换。在数据库的三级模式结构中,外模式与模式的映像实现了逻辑独立性,即数据的逻辑结构独立于应用...
1. 数据库管理系统(DBMS)是操纵和管理数据库,控制数据资源使用的软件,如Oracle、SQL Server、MySQL等。 2. 事务是操作系统中构成单一逻辑工作单元的操作集合,它具有原子性、一致性、隔离性和持久性的特性。在...
在设备管理中,为了提高设备利用率,引入了虚拟设备的概念,通过高速设备模拟低速设备,使独占设备变为共享设备。在数据库的三级模式体系结构中,外模式与模式之间的映像实现了逻辑独立性,即数据的逻辑结构可以独立...
大型数据库系统如SQL Server通常提供排它锁功能,但在Access中,这可能需要通过编程手段实现。 6. **VB解决方案**: 由于Access内建的限制,可以利用Visual Basic for Applications (VBA)编写代码来模拟排它锁的...
- **有标准语言**:SQL 是关系数据库的标准查询语言,广泛应用于各种数据库系统中。 - **表示复杂的语义**:通过键、索引等机制,可以表示出复杂的数据关系。 **9. 关于关系的关键字** - **唯一标识**:关键字是...
13. **SYBASE解决方案**:Adaptive Server Anywhere是SYBASE的轻量级、高性能SQL数据库,支持单机和服务器模式。 14. **事务**:在操作系统中,事务是一组操作,形成一个逻辑工作单元,具有原子性、一致性、隔离性...
14. Adaptive Server Anywhere是SYBASE提供的轻量级、高性能SQL数据库,可作为单机或服务器运行。 15. 事务是操作系统中逻辑工作单元,可以是一系列操作的集合。 16. 数据清理是数据仓库构建过程中的重要步骤,...
正确的做法是使用SQL查询或内置函数来统计记录数。 ### 3. Java数组初始化后的默认值 - **知识点概述**:在Java中,使用`new int[25];`创建数组后,所有元素将被自动初始化为0。 - **选项解析**: - A. x[24]为0 ...
13. **Adaptive Server Anywhere**:Sybase的移动和嵌入式数据库,支持单机和服务器模式。 14. **事务**:在操作系统中,事务是一系列操作的逻辑单元,保证原子性和一致性。 15. **数据清理**:在数据仓库构建中,...