Mysql:更新全部或首次选择和更新后?

时间:2014-02-20 11:06:46

标签: php mysql

我有一个包含2列的表:id和count。 Count是异或(其中只有一个可以同时为1)。我需要更新count = 1的行,并且需要将前一个计数1设置为0。

我认为有两种策略:

1)在表格上做一个选择,找到1的行。 在0更新它。 将我想要的行更新为1。

2)全局更新计数0处的表。 将我想要的行更新为1。

在第一种情况下,我做3查询,但“小”。 在第二种情况下,我做了2个查询,但其中一个是“大”。

哪种策略更好?

1 个答案:

答案 0 :(得分: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'