Php Mysql:全部更新还是先选择后更新?
我有一个表,有两列:id和count。计数为异或(同时只能有一个计数为1)。我需要更新计数为1的行,并且需要将以前的计数1设置为0 我认为有两种策略: 1) 在表上进行选择,找到1处的行。 在0更新它。 更新我希望位于1的行 2) 全局更新计数为0的表。 更新我希望位于1的行 在第一种情况下,我进行3次查询,但“很小”。 在第二种情况下,我做了两个查询,但其中一个是“big”Php Mysql:全部更新还是先选择后更新?,php,mysql,Php,Mysql,我有一个表,有两列:id和count。计数为异或(同时只能有一个计数为1)。我需要更新计数为1的行,并且需要将以前的计数1设置为0 我认为有两种策略: 1) 在表上进行选择,找到1处的行。 在0更新它。 更新我希望位于1的行 2) 全局更新计数为0的表。 更新我希望位于1的行 在第一种情况下,我进行3次查询,但“很小”。 在第二种情况下,我做了两个查询,但其中一个是“big” 哪种策略更好?如果只需交换两行上的值,则可以在单个查询中完成 例如 使用自联接进行更新: update myTable
哪种策略更好?如果只需交换两行上的值,则可以在单个查询中完成 例如 使用自联接进行更新:
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'
我想,无论什么事情,总的来说都需要更少的时间。在这两种情况下,您都在进行两次更新,但在第一次更新中有一个额外的选择。因此,只要看看这是否会改变所用的时间。您可以将策略的两个步骤(1)组合为一个步骤:“在表上进行选择,在1处找到行。在0处更新它”。我总是在发布之前进行测试:)最后一个示例正是我要查找的。我不记得我可以在同一张桌子上打两次电话。TNX
update myTable a, myTable b set
a.`count` = 1,
b.`count` = 0
where a.id = '1'
and b.`count` = '1'