更新整数列中的特定位

Jür*_*ock 20 mysql bitmask

我有一个mysql表,其中用户权限存储为位掩码:

|user   | permissions |
| Admin | 31          |
| User  | 13          |

           16 8  4  2  1
Admin ->   1  1  1  1  1  -> 16 + 8 + 4 + 2 + 1 -> 31
User  ->   0  1  1  0  1  ->  8 + 4 + 1 -> 13
Run Code Online (Sandbox Code Playgroud)

现在我想为每个使用sql查询的用户添加权限.假设我想为每个人添加权限16而不修改另一个位.

 UPDATE users SET permission = ????
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

Ian*_*and 38

要添加权限16,您只需说

UPDATE users SET permission = permission | 16;
Run Code Online (Sandbox Code Playgroud)

按位OR运算符将打开位.要关闭它们,请使用AND操作和要关闭的位的补码:

UPDATE users SET permission = permission & ~16
Run Code Online (Sandbox Code Playgroud)