4 database-design sql-server primary-key concurrency multi-thread
我公司想了解一下效果:
如果我们有一个带有主键标识列的表,int 主键 IDENTITY(1,1),
并且应用程序正在进行多线程并行处理,试图在一张表上同时进行 1000 次插入。
身份主键列是否会失败,以任何方式违反主键,例如:处理器正在尝试输入相同的身份编号?
或者 SQL 被设计成即使在多线程并行插入中也能成功?
注意:IDENTITY_INSERT 关闭
Pau*_*ite 12
身份主键列是否会失败,以任何方式违反主键,例如:处理器试图输入相同的身份号码?
这在 SQL Server 产品文档中有介绍:
CREATE TABLE (Transact-SQL) IDENTITY (Property)
标识列可用于生成键值。列上的标识属性保证以下内容:
- 每个新值都是根据当前种子和增量生成的。
- 特定事务的每个新值都不同于表上的其他并发事务。
第二点是你需要的保证。
无论有多少用户进程或线程同时访问 SQL Server,它都是有效的。
明确说明:是的,身份分配是线程安全的。
调用CMEDSeqGen::GenerateNewValue
将下一个值分配给调用者,并由闩锁(轻量级同步对象)保护。它不受用户事务的影响,这意味着在回滚的情况下您最终可能会出现间隙。并发事务可以生成身份(和序列)值而无需等待锁定。
有关更多详细信息,请参阅我对相关问题的回答。
归档时间: |
|
查看次数: |
2228 次 |
最近记录: |