MySQL:更新将字段设置为0的所有行,但将一行的字段设置为1

时间:2009-06-18 14:41:55

标签: php mysql

是否有一种有效的方法可以将选择的行'字段更新为0,但是根据ID将其中一行设置为1.

基本上,我在数据库中有多个对象,我想在哪个“inuse”之间切换,因此查询会将其中一行(按id)设置为inuse = 1,其他行设置为inuse = 0

谢谢:)

7 个答案:

答案 0 :(得分:22)

UPDATE `table`
SET `inuse` = (`id` = 23)

答案 1 :(得分:11)

不确定

UPDATE table SET inuse=IF(id=ABCD, 1, 0)
如果id为ABCD,则

将inuse字段设置为1,否则为0。

答案 2 :(得分:1)

UPDATE  table
SET     inuse = (id = @id)
WHERE   id = @id
        OR inuse

这将只更新相关的行。

答案 3 :(得分:0)

UPDATE myTable
SET Field = 0
WHERE FieldID <> [WhateverID]

UPDATE myTable 
SET Field = 1
WHERE FieldId = [WhateverID]

答案 4 :(得分:0)

尝试

update tbl set inuse = if(test, 1, 0);

或更短

update tbl set inuse = test;

例如

update tbl set inuse = name = 'foo';

答案 5 :(得分:0)

如果你要设置一个标志,所以代码的其他部分不能同时使用同一个对象,如果调用代码设置为inuse = 1并在完成后重置它,则会更好。否则,您将最终将一个线程标记为使用中的对象(行),然后如果另一个线程需要另一个对象,它将重置第一个,同时仍在使用中。

如果不是这种情况,并且您只想设置一个用户,并重置所有其他用户,则可以使用:

UPDATE myTable
SET InUse = CASE
   WHEN myTable.id = @id THEN 1
   ELSE 0
END

答案 6 :(得分:0)

如果您的数据库使用事务,这是最好的方法:

update myTable set inuse = 0;
update myTable set inuse = 1 where id = ?;

如果你没有使用交易,那么使用CASE的另一个答案是最好的选择,因为它是可移植的。但它需要比两个UPDATE语句更多的CPU时间。