9
有两个表:包含子查询的MySQL查询是否为原子?
表1的唯一会话
ID Count
表2(会话)
ID Name
我想count
只有name
更新不存在进入会话来计算独特的会话,这是一个例子,所以客观是不要以另一种方式来做,但是que stion是:
Rowsaffected = Update table1
set Count = Count + 1
where (Select count(*) from table2 where Name = 'user1') = 0;
Insert into table2 (NAME) values('user');
是第一个查询原子查询吗?如果是的话,那就没有问题了。
如果不是,那么如果有多个线程运行来执行上述操作会怎样?有机会:
线程1:计数返回0,在线程2启动之前它已经更新了表1,但没有更新表2。 线程2:它发现计数为0,它也将更新计数。
现在对于同一个用户,计数是2,不应该发生。
任何建议/反馈。
@Johan:MySQL中哪个引擎支持事务?我不知道其他人比InnoDB – 2011-04-28 11:57:58
E.g. NDBCluster,BDB – Johan 2011-04-28 12:09:15
我正在使用InnodDB,所以你的意思是第一个查询在本质上是原子的,即在查询完成之前,没有其他人能够读取该表? – Navin 2011-04-29 06:37:41