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