您可以创建一个SELECT
来检查用户数并检索新用户的数据,然后使用该选择将其插入表中:
INSERT INTO users (
name, email, [password]
)
SELECT
'newUser' AS name
, 'email@example.com' AS email
, 'fsfsfs' AS [password]
FROM
users
HAVING
COUNT(*) < 100000;
SELECT
当数据库中的用户数少于100000时,该语句将返回一行;如果用户数为100000或更多,则该语句将返回0记录。
整个语句(INSERT..SELECT
)在每种情况下均有效,但是当该SELECT
部分返回0行时,INSERT
将不会插入任何内容。
通过SERIALIZABLE
事务级别,可以确保并发写入不会互相干扰。COUNT(*)使用最有效的索引/键对行进行计数,这意味着锁定时间将最短。
由于整个动作是在一个语句中完成的,因此可以防止在SELECT
和的执行之间插入INSERT