【发布时间】:2014-10-19 16:53:10
【问题描述】:
我使用的是 SQL Server 2012。
我有存储用户的表。允许的最大用户数为 100 万。我有一个 sproc,我在其中注册用户。当我插入时,我想确保 users 表中的总行数不会超过 100 万。我更喜欢使用允许最大并发的方法。
我相信我可以使用隔离级别为 SERIALIZABLE 的事务,然后首先计算行数,如果总计数小于 100 万则插入。我的理解是 SERIALIZABLE 限制性很大,会随着并发的增加而导致性能下降。
IF(SELECT COUNT(*) FROM Users) < 100000
BEGIN
INSERT INTO Users VALUES (@Name, @Email, @Password)
END
如何以原子方式执行此操作,以确保总行数少于 100 万,但同时进行最小锁定以防止阻塞其他事务?
有针对这种情况的解决方案/最佳做法吗?
【问题讨论】:
标签: sql sql-server tsql