LIVE
「swap[ping] the and NOT_LIVE
values」とは正確にはどういう意味ですか? ビットが設定/設定解除されている場合LIVE
、探しているのはビット単位の NAND です。たとえば、その値が 8 で、設定を解除したい場合
UPDATE table SET status = status &~ 8
値が 8 のビットを設定解除します。LIVE
とNOT_LIVE
が 2 つの異なるビットの場合、一方を設定 (OR) し、他方を設定解除 (NAND) する必要があります。ここでは、 (8)NOT_LIVE
を設定しながら (4) を削除します。LIVE
UPDATE table SET status = (status &~ 4) | 8
2 つの値しか持てないstatus
場合は、それらの 2 つの値を加算してから減算する必要があります。たとえば、2 つの値が 1 と 2 の場合status
UPDATE table SET status = (1 + 2) - status
もちろん、どれを書くことができますか
UPDATE table SET status = 3 - status
status
他の値を取ると失敗することに注意してください。2つのうちの1つである場合にのみ変更することで、それを回避できますstatus
。
UPDATE table SET status = 3 - status WHERE status IN (1, 2)
この場合、status
どちらLIVE
でもない場合はNOT_LIVE
変更されません。