zoukankan      html  css  js  c++  java
  • mysql 使用位运算

     如果你不知道什么是位运算的话, 那么请你先去看看基础的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字段使用索引,所以如何使用来优化查询才是最重点

  • 相关阅读:
    蛙蛙请教:问几个面向对象设计的问题
    推荐一些flash和asp.net结合开发的文章
    写一个跟踪的类库
    蛙蛙推荐:有关随机数的一些讨论
    蛙蛙推荐:用ASP.NET WEB Services和Flash MX 2004打造MP3播放器
    HiveQL学习
    Linux rpm 命令参数使用详解[介绍和应用]
    java.util.concurrent.locks.Condition 例子程序探讨
    [转]sudoers设置
    配置linux电脑
  • 原文地址:https://www.cnblogs.com/xingmeng/p/2874833.html
Copyright © 2011-2022 走看看