91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何基于MySQL在磁盤上存儲NULL值

發布時間:2022-02-23 09:14:52 來源:億速云 閱讀:175 作者:小新 欄目:開發技術

小編給大家分享一下如何基于MySQL在磁盤上存儲NULL值,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1 為何不能直接存個NULL?

NULL值列表,一行數據里可能有的字段值是NULL,比如nickname字段,允許為NULL,存儲時,如果沒賦值,這字段值就是NULL。
假設這個字段的NULL值在磁盤存儲時,就是按“NULL”字符串存儲的,是不是很浪費存儲空間而且還奇怪?

2 到底怎么存儲?

不通過字符串,而是通過二進制bit位存儲,一行數據里假設有多個字段的值都是NULL,那么這多個字段的NULL,就會以bit位形式存放在NULL值列表。

如下表:

CREATE TABLE customer (
  name VARCHAR(10) NOT NULL,
  address VARCHAR(20), gender CHAR(1),
  job VARCHAR(30),
  school VARCHAR(50)
) ROW_FORMAT=COMPACT;

有4個變長字段,還有個定長字段,name聲明NOT NULL,其他4個字段都可能NULL
如下一行數據怎么存儲在磁盤呢:

jack NULL m NULL xx_school

有倆字段都是NULL

3 一行數據的磁盤存儲格式

思考上面那個表里的那行案例數據,在磁盤上如何存儲呢,因為他有多個變長字段,還有多個字段允許為NULL。首先我們先回顧一下,一行數據在磁盤上的存儲格式應該是下面這樣的:

變長字段長度列表 NULL值列表 頭信息 column1=value1 column2=value2 ... columnN=valueN

4個變長字段,逆序先放school字段的長度,再放job、address、name幾個字段的值長度?
但要區分一個問題,若這變長字段值為NULL,就不用在變長字段長度列表里存放他的值長度,所以在上面那行數據,只有name和school兩個變長字段有值,把他們的長度按照逆序放在變長字段長度列表即可:

0x09 0x04 NULL值列表 頭信息 column1=value1 column2=value2 ... columnN=valueN

所有允許值為NULL的字段,不是說值就得是NULL,只要是允許為NULL的字段,每個字段都有個二進制bit位值:

  • bit值是1說明是NULL

  • bit值是0說明不是NULL

比如上面4個字段都允許為NULL,每個人都會有一個bit位,這一行數據的值是

jack NULL m NULL xx_school

其中2個字段是null,2個字段不是null,所以4個bit位應該是:1010
但實際放在NULL值列表時,按逆序放,所以NULL值列表里放的:0101,整體這一行數據如下:

0x09 0x04 0101 頭信息 column1=value1 column2=value2 ... columnN=valueN

實際NULL值列表存放時,一般起碼8個bit位的倍數,不足8個bit位就高位補0,所以實際存放如下:

0x09 0x04 00000101 頭信息 column1=value1 column2=value2 ... columnN=valueN

4 如何讀磁盤的一行數據?

磁盤數據存儲格式:

0x09 0x04 00000101 頭信息 column1=value1 column2=value2 ... columnN=valueN

先讀:

  • 變長字段長度列表

就知道有幾個變長字段

  • NULL值列表

哪些變長字段是NULL:

從變長字段長度列表中解析出不為NULL的變長字段的值長度,然后也知道哪些字段是NULL。根據這些信息,就能從實際的列值存儲區域里,把你每個字段的值讀取出來了。

  • 變長字段值,就按值長度讀取,若為NULL,就知道他是個NULL,沒有值存儲

  • 定長字段,按定長長度讀取

以上是“如何基于MySQL在磁盤上存儲NULL值”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

纳雍县| 鹤山市| 浙江省| 宜州市| 定结县| 涟水县| 高台县| 云安县| 龙岩市| 石家庄市| 隆德县| 丰城市| 涞源县| 洛扎县| 新巴尔虎左旗| 西昌市| 广灵县| 黄骅市| 蒲江县| 土默特左旗| 双牌县| 格尔木市| 长治市| 浮山县| 阳城县| 乌兰察布市| 渭源县| 沙坪坝区| 仲巴县| 京山县| 广南县| 娄底市| 台中市| 阳东县| 榆树市| 美姑县| 响水县| 泾川县| 达拉特旗| 江津市| 黎城县|