最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中Bit數(shù)據(jù)類型的使用方式

 更新時(shí)間:2023年09月01日 09:11:21   作者:技研行者  
這篇文章主要介紹了MySQL中Bit數(shù)據(jù)類型的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Mysql Bit字段類型用來存儲(chǔ)二進(jìn)制的位值,Bit(M)代表可存儲(chǔ)M位的二進(jìn)制數(shù)據(jù),M取值為區(qū)間為1-64。

數(shù)據(jù)庫Bit類型常用來存儲(chǔ)Boolean類型的狀態(tài),也就是可以使用一個(gè)字段來存最多64個(gè)狀態(tài),如果你的系統(tǒng)狀態(tài)夠多或者將來可能會(huì)有擴(kuò)展?fàn)顟B(tài),那推薦使用這個(gè)類型進(jìn)行處理,查詢或更新某個(gè)狀態(tài)時(shí)按位操作即可。

舉個(gè)例子:

某個(gè)系統(tǒng)需要保存對(duì)用戶發(fā)送短信的狀態(tài),有10幾種不同類型的短信,每種都要標(biāo)記發(fā)過沒有,這時(shí)候用bit類型就很方便。

1、準(zhǔn)備測(cè)試表

CREATE TABLE `bit_demo` (
  `id` int NOT NULL,
  `name` varchar(100) DEFAULT NULL,
  `flag` bit(3) DEFAULT NULL COMMENT '從低到高位依次為移動(dòng),電信,聯(lián)通',
  PRIMARY KEY (`id`),
  KEY `idx_bit` (`flag`)
)

為了將來可擴(kuò)展,我們一般先從低位開始使用,此處我們?cè)O(shè)計(jì)三個(gè)位,從低到高位依次為移動(dòng),電信,聯(lián)通短信渠道是否完成發(fā)送,各位值上1表示true,0表示false。3個(gè)位,一共8種情況,二進(jìn)制值范圍:000->111,十進(jìn)制范圍:0->7,

如下表格:

二進(jìn)制十進(jìn)制說明
0000所有渠道都未發(fā)送
0011移動(dòng)渠道已發(fā)送
0102電信渠道已發(fā)送
0113移動(dòng)、電信渠道已發(fā)送
1004聯(lián)通渠道已發(fā)送
1015移動(dòng)、聯(lián)通渠道已發(fā)送
1106聯(lián)通、電信渠道已發(fā)送
1117移動(dòng)、電信、聯(lián)通渠道已發(fā)送

2、如何寫入bit數(shù)據(jù)

位值字面值用 b 或者 0b 做前綴,后接以 0 1 組成的二進(jìn)制數(shù)字。

其中 0b 是區(qū)分大小寫的, 0B 則會(huì)報(bào)錯(cuò)。

合法的 Bit-value:

  • b’01’
  • B’01’
  • 0b01

非法的 Bit-value:

  • b’2’ (2 不是二進(jìn)制數(shù)值, 必須為 0 或 1)
  • 0B01 (0B 必須是小寫 0b)

以下三條sql插入了相同位值:

insert into bit_demo(`id`,`name`,`flag`) values(1,'張三',3);
insert into bit_demo(`id`,`name`,`flag`) values(2,'李四',b'011');
insert into bit_demo(`id`,`name`,`flag`) values(3,'三五',0b011);

3、bit數(shù)據(jù)查詢展示

位值是作為二進(jìn)制返回的,輸出到 MySQL Client 可能會(huì)顯示不出來**(有些client桌面工具默認(rèn)展示10進(jìn)制),**

file

如果要轉(zhuǎn)換為可打印的字符,可以使用內(nèi)建函數(shù) BIN() 或者 HEX( )來進(jìn)行查詢,

如下內(nèi)置函數(shù):

  • flag+0 10進(jìn)制
  • BIN(flag) 二進(jìn)制
  • OCT(flag)八進(jìn)制
  • HEX(flag) 十六進(jìn)制

內(nèi)置函數(shù)使用案例如下:

SELECT name,flag+0, BIN(flag), OCT(flag), HEX(flag) FROM bit_demo

file

高位為0,轉(zhuǎn)換函數(shù)不會(huì)顯示,從上圖業(yè)務(wù)數(shù)據(jù)看出,所有用戶已發(fā)送移動(dòng)和電信渠道的短信.

4、修改指定位狀態(tài)

  • 如果張三用戶已發(fā)送聯(lián)通渠道短信,如何update數(shù)據(jù)?
  • 如果張三用戶取消電信渠道短信,如何update數(shù)據(jù)?
  • 先把張三數(shù)據(jù)查出來,變更數(shù)據(jù),再整體寫回去?

正確姿勢(shì)應(yīng)該如下:

4.1、使用或運(yùn)算寫1值

說明:運(yùn)用任何值和0做或運(yùn)算,不改變?cè)堤匦裕鐚?11的最高位改為1的運(yùn)算如下:

// 011|100=111
update bit_demo set flag=flag|100 where id=1

查詢結(jié)果:

file

從上圖業(yè)務(wù)數(shù)據(jù)看出,張三用戶所有渠道短信已發(fā)送.

4.2、使用與運(yùn)算寫0值

說明:運(yùn)用任何值和1做與運(yùn)算,不改變?cè)堤匦?,例如?11的最高位改為0的運(yùn)算如下:

// 111&011=011
update bit_demo set flag=flag&011 where id=1

查詢結(jié)果:

file

從上圖業(yè)務(wù)數(shù)據(jù)看出,張三用戶聯(lián)通渠道短信還未發(fā)送.

4.3、使用異或運(yùn)算寫0或1值

說明:用異或運(yùn)算修改,只會(huì)在原值基礎(chǔ)上進(jìn)行變更,最終值有可能是0也有可能是1

法則回顧:異或也叫半加運(yùn)算,其運(yùn)算法則相當(dāng)于不帶進(jìn)位的二進(jìn)制加法,例子:

   110
^  100
=  010
update bit_demo set flag=flag^b'100' where id=1;

file

5、如何根據(jù)某位狀態(tài)查詢

  • 如何查詢所有已發(fā)送過電信渠道短信的數(shù)據(jù)?
  • 如何查詢所有未發(fā)送電信渠道短信的數(shù)據(jù)?

原理:將數(shù)據(jù)庫值先作位運(yùn)算,再作對(duì)比

任意數(shù)據(jù)xxx和010作&運(yùn)算,都等于0x0格式

# 查詢已發(fā)送電信渠道數(shù)據(jù)
SELECT id,name,flag+0, BIN(flag) FROM bit_demo where flag&010=b'010'
或
SELECT id,name,flag+0, BIN(flag) FROM bit_demo where flag&010=2

file

# 查詢未送電信渠道數(shù)據(jù)
SELECT id,name,flag+0, BIN(flag) FROM bit_demo where flag&010=b'000'
或
SELECT id,name,flag+0, BIN(flag) FROM bit_demo where flag&010=0

file

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mysql 選擇插入數(shù)據(jù)(包含不存在列)具體實(shí)現(xiàn)

    mysql 選擇插入數(shù)據(jù)(包含不存在列)具體實(shí)現(xiàn)

    mysql 選擇插入數(shù)據(jù)的文章會(huì)搜到很多本例特色是包含不存在列,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下,希望對(duì)大家有所幫助
    2013-08-08
  • MySQL 8 新特性之Invisible Indexes

    MySQL 8 新特性之Invisible Indexes

    這篇文章主要介紹了MySQL 8 新特性之Invisible Indexes 的相關(guān)資料,需要的朋友可以參考下
    2018-05-05
  • Mysql使用on update current_timestamp問題

    Mysql使用on update current_timestamp問題

    這篇文章主要介紹了Mysql使用on update current_timestamp問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 詳解mysql權(quán)限和索引

    詳解mysql權(quán)限和索引

    本篇文章給大家詳細(xì)分析了mysql的權(quán)限和索引相關(guān)知識(shí)要點(diǎn),有這方面需要的朋友參考學(xué)習(xí)下。
    2018-01-01
  • You have an error in your SQL syntax; check the manual that corresponds解決方法

    You have an error in your SQL&

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
    2023-02-02
  • MySQL中int(10)和int(11)的區(qū)別詳解

    MySQL中int(10)和int(11)的區(qū)別詳解

    本文主要介紹了MySQL中int(10)和int(11)的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Win中安裝mysql的詳細(xì)步驟

    Win中安裝mysql的詳細(xì)步驟

    這篇文章主要為大家詳細(xì)介紹了Win中安裝mysql的詳細(xì)步驟,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Mysql主從三種復(fù)制模式(異步復(fù)制,半同步復(fù)制,組復(fù)制)

    Mysql主從三種復(fù)制模式(異步復(fù)制,半同步復(fù)制,組復(fù)制)

    這篇文章主要介紹了Mysql主從三種復(fù)制模式(異步復(fù)制,半同步復(fù)制,組復(fù)制),MySQL異步復(fù)制是主從復(fù)制過程中默認(rèn)的復(fù)制模式,下文簡(jiǎn)單介紹,感興趣的朋友可以參考一下
    2022-08-08
  • MySQL復(fù)雜SQL之多表聯(lián)查/子查詢?cè)敿?xì)介紹(最新整理)

    MySQL復(fù)雜SQL之多表聯(lián)查/子查詢?cè)敿?xì)介紹(最新整理)

    掌握多表聯(lián)查 (INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN) 和子查詢(標(biāo)量、列、行、表子查詢、相關(guān)/非相關(guān)、EXISTS/NOT EXISTS)是進(jìn)行復(fù)雜數(shù)據(jù)庫查詢的基礎(chǔ),這篇文章主要介紹了MySQL復(fù)雜SQL(多表聯(lián)查/子查詢)詳細(xì)講解,需要的朋友可以參考下
    2025-06-06
  • 在MySQL中修改密碼及訪問限制的設(shè)置方法詳解

    在MySQL中修改密碼及訪問限制的設(shè)置方法詳解

    MySQL是一個(gè)真正的多用戶、多線程SQL數(shù)據(jù)庫服務(wù)器。MySQL是以一個(gè)客戶機(jī)/服務(wù)器結(jié)構(gòu)的實(shí)現(xiàn),它由一個(gè)服務(wù)器守護(hù)程序mysqld和很多不同的客戶程序和庫組成。
    2007-03-03

最新評(píng)論

龙川县| 东辽县| 阿拉善盟| 道真| 浦城县| 太原市| 桦甸市| 康平县| 陈巴尔虎旗| 景泰县| 宁海县| 侯马市| 潞城市| 屏山县| 东阳市| 高碑店市| 瓮安县| 翁源县| 玉山县| 额尔古纳市| 邹城市| 伊金霍洛旗| 山丹县| 左权县| 淮北市| 治多县| 锡林郭勒盟| 梁河县| 吉木乃县| 崇信县| 黄龙县| 新建县| 泰宁县| 株洲市| 潮安县| 康马县| 泽库县| 新竹市| 宜州市| 洞口县| 通许县|