注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

成功源于细节

梦想、奋斗、收获

 
 
 

日志

 
 
 
 

mysql 使用位运算  

2012-12-17 17:13:03|  分类: mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

如果你不知道什么是位运算的话, 那么请你先去看看基础的C语言教程吧。 
与运算 a & b  , 
或运算 a | b ,  
异或运算 a ^ b , 

或者 
你也可以将 与运算理解为 + 法  
例如 
1|2 = 3   (1+2 = 3) 
1|2|4 = 7 (1+2+4 = 7) 

将 异或运算理解为 - 法 
例如 
3^2 = 1 (3-2 = 1) 
3^1 = 2  (3-1 = 2) 

最后将 与运算 作为判断 
例如 
3&2 = 1    (3 = 1 + 2, 由 1和2组成 ,所以判断3&2 = 1 )  
3&4 = 0   ( 3 没有由 4组成,所以判断3&4 = 0) 

那么位运算有何用处呢, 例如 UNIX系统中的权限, 通常我们所知  权限分为  r 读, w 写, x 执行,其中 它们的权值分别为4,2,1, 所以 如果用户要想拥有这三个权限 就必须  chomd 7  , 即 7=4+2+1 表明 这个用户具有rwx权限,如果只想这个用户具有r,x权限 那么就 chomd 5即可 

说道此处就要涉及到数据库了。 

通常 我们的数据表中 可能会包含各种状态属性, 例如 blog表中 , 我们需要有字段表示其是否公开,是否有设置密码,是否被管理员封锁,是否被置顶等等。 也会遇到在后期运维中,策划要求增加新的功能而造成你需要增加新的字段。 

这样会造成后期的维护困难,数据库增大,索引增大的情况。 这时使用位运算就可以巧妙的解决。 

例如 

<?php 
define('B_PUBLIC',1);  // 公开 
define('B_PASSWORD',2);  // 加密 
define('B_LOCK',4); // 封锁 
define('B_TOP',8); // 置顶 
?> 

-- 公开blog  给status进行或运算 
UPDATE blog SET status = status | 1; 
-- 加密blog 给status进行或运算 
UPDATE blog SET status = status | 2; 
-- 封锁blog 
UPDATE blog SET status = status | 4; 
-- 解锁blog 
UPDATE blog SET status = status ^ 4; 
--查询所有被置顶的blog 
SELECT * FROM blog WHERE status & 8; 

虽然节省了空间,但是由于没有办法对status字段使用索引,所以如何使用来优化查询才是最重点的。 
原文链接:http://blog.csdn.net/21aspnet/article/details/6801116

  评论这张
 
阅读(1063)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017