我有一個2列的表:id和count。 Count是異或(只有其中一個可以同時爲1)。我需要更新計數= 1一行,需要把之前的計1爲0Mysql:更新全部或首先選擇並更新後?
我認爲兩種策略:
1)做一個選擇放在桌上,找到該行從1 更新爲0 更新,我想是在1
2)全球更新在計數表中的行0 更新,我想是在1
在第一種情況下,第i行做3查詢,但「小」。 在第二種情況下,我做了2個查詢,但其中一個是「大」。
哪種策略更好?
我有一個2列的表:id和count。 Count是異或(只有其中一個可以同時爲1)。我需要更新計數= 1一行,需要把之前的計1爲0Mysql:更新全部或首先選擇並更新後?
我認爲兩種策略:
1)做一個選擇放在桌上,找到該行從1 更新爲0 更新,我想是在1
2)全球更新在計數表中的行0 更新,我想是在1
在第一種情況下,第i行做3查詢,但「小」。 在第二種情況下,我做了2個查詢,但其中一個是「大」。
哪種策略更好?
如果您只是交換兩行的值,您可以在單個查詢中完成。
例如。
+----+-------+
| id | count |
+----+-------+
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
+----+-------+
更新使用自聯接:
update myTable a, myTable b set
a.`count` = b.`count`,
b.`count` = a.`count`
where a.id = '2'
and b.id = '3'
結果:
+----+-------+
| id | count |
+----+-------+
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
+----+-------+
如果你想針對特定行,你可以這樣做也。 例如。與ID 1行應該有一個計數爲1,並且無論目前有一個計數爲1應該被重置爲0.
update myTable a, myTable b set
a.`count` = 1,
b.`count` = 0
where a.id = '1'
and b.`count` = '1'
無論花費的時間總體上我猜。在這兩種情況下,您都在進行兩項更新,但第一項中有一項額外選擇。所以只要看看是否改變了時間。 – Neels
您可以結合策略(1)的兩個步驟:「在表上進行選擇,在1處找到行」,將其更新爲0。 –