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

基于MySQL在磁盤上存儲NULL值

 更新時間:2022年02月22日 17:09:04   作者:公眾號JavaEdge  
這篇文章主要介紹了基于MySQL在磁盤上存儲NULL值,NULL值列表,一行數(shù)據(jù)里可能有的字段值是NULL,比如nickname字段,允許為NULL,存儲時,如果沒賦值,這字段值就是NULL,下文關于NULL值的相關資料,需要的小伙伴可以參考一下

1 為何不能直接存?zhèn)€NULL?

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

2 到底怎么存儲?

不通過字符串,而是通過二進制bit位存儲,一行數(shù)據(jù)里假設有多個字段的值都是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
如下一行數(shù)據(jù)怎么存儲在磁盤呢:

jack NULL m NULL xx_school

有倆字段都是NULL

3 一行數(shù)據(jù)的磁盤存儲格式

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

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

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

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

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

  • bit值是1說明是NULL
  • bit值是0說明不是NULL

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

jack NULL m NULL xx_school

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

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

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

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

4 如何讀磁盤的一行數(shù)據(jù)?

磁盤數(shù)據(jù)存儲格式:

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

先讀:

  • 變長字段長度列表

就知道有幾個變長字段

  • NULL值列表

哪些變長字段是NULL:

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

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

到此這篇關于基于MySQL在磁盤上存儲NULL值的文章就介紹到這了,更多相關在磁盤上存儲NULL值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解MySQL連接掛死的原因

    詳解MySQL連接掛死的原因

    本次分享的是一次關于 MySQL 高可用問題的定位過程,其中曲折頗多但問題本身卻比較有些代表性,遂將其記錄以供參考。
    2021-05-05
  • MySQL進行group by字段返回大量異常結果的問題解決

    MySQL進行group by字段返回大量異常結果的問題解決

    本文主要介紹了MySQL進行group by字段返回大量異常結果的問題解決,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • 解決mysql的int型主鍵自增問題

    解決mysql的int型主鍵自增問題

    這篇文章主要介紹了解決mysql的int型主鍵自增問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Mysql忘記root密碼怎么辦

    Mysql忘記root密碼怎么辦

    MySQL有時候忘記了root密碼是一件傷感的事,下面通過本文給大家介紹Mysql忘記root密碼怎么辦的相關知識,需要的朋友參考下
    2016-01-01
  • Mysql提升索引效率優(yōu)化的八種方法總結

    Mysql提升索引效率優(yōu)化的八種方法總結

    索引實際上也是一張表,保存了主鍵和索引的字段,并且指向實體表的記錄,所以索引也是需要占用空間的,這篇文章主要給大家介紹了關于Mysql提升索引效率優(yōu)化的八種方法,需要的朋友可以參考下
    2024-04-04
  • mysql日志系統(tǒng)redo log和bin log介紹

    mysql日志系統(tǒng)redo log和bin log介紹

    這篇文章主要介紹了mysql日志系統(tǒng)redo log和bin log介紹,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • MySQL數(shù)據(jù)庫的觸發(fā)器和事務

    MySQL數(shù)據(jù)庫的觸發(fā)器和事務

    這篇文章主要介紹了MySQL數(shù)據(jù)庫的觸發(fā)器和事務,觸發(fā)器是SQL?server提供給程序員和數(shù)據(jù)分析員來保證數(shù)據(jù)完整性的一種方法,它是與表事件相關的特殊的存儲過程,是由事件來觸發(fā)
    2022-08-08
  • MySQL對標準SQL的擴展方式

    MySQL對標準SQL的擴展方式

    MySQL對標準SQL的擴展包括磁盤上的數(shù)據(jù)組織方式、通用語言語法、SQL語句語法、數(shù)據(jù)類型、函數(shù)和運算符等,這些擴展使得MySQL在某些方面與其他SQL數(shù)據(jù)庫管理系統(tǒng)不同
    2025-02-02
  • mysql數(shù)據(jù)存放的位置在哪

    mysql數(shù)據(jù)存放的位置在哪

    在本篇文章里小編給大家分享的是關于mysql數(shù)據(jù)存放的位置及相關知識點內(nèi)容,需要的朋友們可以參考下。
    2020-07-07
  • mysql實現(xiàn)合并同一ID對應多條數(shù)據(jù)的方法

    mysql實現(xiàn)合并同一ID對應多條數(shù)據(jù)的方法

    這篇文章主要介紹了mysql實現(xiàn)合并同一ID對應多條數(shù)據(jù)的方法,涉及mysql GROUP_CONCAT函數(shù)的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-06-06

最新評論

余姚市| 容城县| 神木县| 金湖县| 勃利县| 内丘县| 民乐县| 颍上县| 正定县| 米脂县| 云梦县| 平泉县| 壤塘县| 金乡县| 辛集市| 商洛市| 枣庄市| 阜宁县| 建水县| 古丈县| 阿坝| 常德市| 铁岭县| 莎车县| 温泉县| 海丰县| 临潭县| 南陵县| 清水县| 依安县| 东明县| 汉中市| 星座| 茶陵县| 黎平县| 方正县| 五华县| 延川县| 岳普湖县| 临沧市| 保靖县|