是否有一种有效的方法可以将选择的行'字段更新为0,但是根据ID将其中一行设置为1.
基本上,我在数据库中有多个对象,我想在哪个“inuse”之间切换,因此查询会将其中一行(按id)设置为inuse = 1,其他行设置为inuse = 0
谢谢:)
答案 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时间。