有两个表:
表1唯一会话
ID Count
Run Code Online (Sandbox Code Playgroud)
表2(会议)
ID Name
Run Code Online (Sandbox Code Playgroud)
我想更新count只有在name会话中不存在才能计算唯一会话,这是一个例子,所以客观不是通过替代方式来做,但问题是:
Rowsaffected = Update table1
set Count = Count + 1
where (Select count(*) from table2 where Name = 'user1' ) = 0;
Insert into table2 (NAME) values('user');
Run Code Online (Sandbox Code Playgroud)
首先查询原子查询?如果是,那就没有问题.
如果不是,那么如果有多个线程运行来执行上述操作怎么办?有可能:
线程1:count返回0,它在线程2启动之前更新了表1但没有更新表2.线程2:它找到计数0,它也将更新计数.
现在对于同一个用户,count是2,这不应该发生.
任何建议/反馈.
mysql ×1