2012-03-05 62 views
3

要鎖定在MySQL兩行鎖定多行,我應該使用:在MySQL(InnoDB的)

SELECT * FROM <table> WHERE id=? OR id=? FOR UPDATE; 

或者:

SELECT * FROM <table> WHERE id=? AND id=? FOR UPDATE; 

我明明是在事務中只是不知道它是否應該是AND還是OR

回答

3

我不認爲這很重要。根據manual,只會爲「有資格包含在結果集中」的行獲取鎖定。

對於SELECT ... FOR UPDATE,獲取鎖定的掃描行,並預計將發佈不包含在結果集中的資格(例如行,如果他們不符合在WHERE子句中給出的標準)。

更新

您可以使用SHOW ENGINE INNODB STATUS檢查鎖定哪些行對每種類型的SELECT

您可以閱讀更多關於閱讀鎖herehere

+1

無論是AND還是OR,IMO都無所謂。請參閱@ jleahy的回答。 – thekingoftruth 2014-06-26 19:37:00

6

如果您的WHERE子句是id=1 AND id=2那麼沒有行將符合條件包含在結果集中,因此沒有行將被鎖定。

要鎖定兩行,您需要使用id=1 OR id=2,這樣兩行都將包含在結果集中並將被鎖定。