2009-06-18 22 views

Respuesta

22
UPDATE `table` 
SET `inuse` = (`id` = 23) 
+1

Esto es bastante elegante también :) –

+0

¿Crees que esto es más rápido/más eficiente que tu eres Artem? – Joel

+0

Creo que es más o menos lo mismo, si no exactamente lo mismo. –

11

Sure

UPDATE table SET inuse=IF(id=ABCD, 1, 0) 

fijaría el campo inuse a 1 si la identificación es ABCD y 0 en caso contrario.

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

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

Trate

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

o más corto

update tbl set inuse = test; 

por ejemplo

update tbl set inuse = name = 'foo'; 
1
UPDATE table 
SET  inuse = (id = @id) 
WHERE id = @id 
     OR inuse 

Esto actualizará solo las filas relevantes.

0

Si después de establecer un marcador, ninguna otra parte del código utiliza el mismo objeto al mismo tiempo, es mejor si el código de llamada establece inuse = 1 y lo restablece cuando termine. De lo contrario, terminará un hilo para marcar un objeto (fila) como inuse, y luego, si otro hilo necesita otro objeto, restablecerá el primero, mientras todavía está en uso.

Si este no es el caso, y lo que desea ser capaz de establecer inuse para uno, y restablecer todos los demás, se puede utilizar:

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

si su base de datos utiliza transacciones, esta es la mejor manera de para hacerlo:

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

si no está utilizando transacciones, entonces la otra respuesta usando CASE es la mejor opción ya que es portátil. pero requerirá más tiempo de CPU que las dos instrucciones UPDATE.

Cuestiones relacionadas