程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MYSQL入門知識 >> mysql 使用位運算

mysql 使用位運算

編輯: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字段使用索引,所以如何使用來優化查詢才是最重點的。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved