关于mysql二进制权限设置学习总结
在数据库中,在很多情况下,我们需要表示某种状态时,会创建某一个字段表示该条信息的某一种状态,大多使用1或0来表示肯定或否定,当这个表中存在多条这样使用1或0来表示的数据时,我们就可以将此类字段合并成为一个字段,使用数据库位运算来处理,即二进制表示法。
首先在数据库字段中存储数据为十进制数据,十进制数据转换成二进制后,每一个位数都表示一个权限的状态。
例如数据库中存储的15->二进制表示法为1111
每一个1都可以代表本条信息的某一种状态
当我们要修改状态1111为1110时,即将数据库中存储的15改为14
由于我们修改的时最后一位。权值为1,且需要由1->0过程转化。
但不能影响其他位的权限设置。
我们就可以将0001取反结果为1110
使用按位与:1111 & 1110 结果为 1110
可以使用下面的sql语句执行(在status | ~1中,1为需要更改的权限位的权值,status为数据库中的值)
注意:本sql语句为1->0的过程。
update blog set status | ~1 where id = 1;
若我们需要将某项权限修改为1,及0->1
如:1110->1111
同样最后一位权值为1
可以使用按位或:1110|0001 结果为 1111
可以使用下面的sql语句执行(在status & 1中,1为需要更改的权限位的权值,status为数据库中的值)
注意:本sql语句为0->1的过程。
update blog set status & 1 where id = 1;
当我们需要对状态进行查询的时候。
可以使用如下条件
此sql为xxx1状态的数据会匹配成功
select * from blog status & 1 = 1
查询xxx0状态的数据时使用
select * from blog status & 1 != 1
上列两条sql中的1对应为最后一位的权值,可根据需求修改对应权值
建议:将权值定义为类的私有属性,方便使用、对比
声明:本文为原创内容、记录个人学习过程