第五節 從一條記錄說起 InnoDB記錄結構

2022-02-21 09:31:44 字數 1774 閱讀 6111

《mysql 是怎樣執行的:從根兒上理解 mysql》第五節:從一條記錄說起——innodb記錄結構

現在只知道客戶端傳送請求並等待伺服器返回結果。

mysql什麼方式來訪問這些資料?

mysql伺服器上負責對錶資料的讀取和寫入工作的部分是儲存引擎。

什麼格式存放?

真實的資料在不同儲存引擎中存放的格式一般是不同的。

innodb將資料劃分為若干個頁,以頁作為磁碟和記憶體的互動的基本單位,innodb也的大小一般為16kb。    

innodb儲存引擎有四種不用型別的行個格式,compact、redundant、dynamic和compressed行格式

指定行格式的語法

create table 表名 (列的資訊) row_format=行格式名稱

alter table 表名 row_format=行格式名稱

案例:create table record_format_demo (

c1 varchar(10),

c2 varchar(10) not null,

c3 char(10),

c4 varchar(10)

)charset=ascii row_format=compact;

compact行格式

一行記錄包含

記錄的額外資訊

變長字段長度列表:

記錄每個變長列資料占用的位元組長度,倒敘存放。

wml記錄,還要再學習。

可以不需要,比如:表的每個列都不是變長的資料型別就沒有。

null值列表:

首先統計允許從儲存null的列,主鍵列、被not null修飾的列不可以儲存null值。

表中麼有允許null值的列,null值列表也就不存在了。

允許儲存null的列對應乙個二進位制位。

二進位制位的值為1,表示該列值為null。

二進位制位的值為0,表示該列值不為null。

二進位制位按照逆序排列,第乙個列和最後乙個二進位制位對應。

mysql規定null值列表必須用整數個位元組位表示,如果使用的二進位制位不是整數個位元組,則在高位補0

記錄頭資訊:

五個固定位元組組成,其他後面學習。

記錄的真實資料

隱藏列,除了真實資料mysql還會新增三個隱藏列。

row_id:可選。在沒有主鍵,也沒有定義unique鍵的列,innodb才會為表新增。

transaction_id:必選,事物id

roll_pointer:必選,回滾指標

資料列非變成字段,沒儲存地方,空格字元填充。

儲存為null的列,在前面的null值列表中有儲存,不會再記錄,節省空間。

char(m)列的儲存格式

列採用定長字符集,該列占用的位元組數不會被加到變長字段長度列表,

如果採用變長字符集時,該列占用的位元組數也會被加到變長字段長度列表。

用字符集最大的位元組佔空間,防止後面修改資料需要的空間變大而重新分配空間導致碎片。

redundant行格式:mysql5.0以前的一種行格式(沒多看 略)

一行記錄包含

記錄的額外資訊

字段長度偏移列表

沒有變長,說明會記錄所有的列(包括隱藏列)。

偏移:表示它是採用兩個相鄰值的差值來計算各個列值的長度。

記錄頭資訊

記錄真實資料

varchar(m)最多能儲存的資料?

計算方式不太理解,後面再學習一次。

記錄資料太多產生的溢位

乙個頁的大小一般是16kb,也就是16384位元組,可能一行記錄超過16384個位元組。

第五節 web爬蟲之urllib(一)

一 urllib.request.urlopen url,data none,timeout,cafile none,capath none,cadefault false,context none 簡介 urllib.request.urlopen 函式用於實現對目標url的訪問 引數詳解 url...

第一章 第五節 JFace

返回目錄 jface構建於swt之上,提供了swt的功能和mvc模式的易用性。swt使用直接的api提供了原生 raw 的控制項。例如,你建立乙個表 table 控制項,然後插入你想顯示的行和列的資料。jface提供了在swt之上的抽象層,所以您只需對抽象層程式設計,然後抽象層會呼叫swt api,...

python程式設計 第一章 第五節

前面已經提到,idle整合開發環境 ide 隨著python直譯器起安裝。pyhon 整合開發環境能夠幫助開發者提高開發效率 加快開發的速度。高效的ide一般會提供外掛程式 工具等幫助開發者提高效率。本書使用idle作為開發工具。本節簡要介紹另外三款免費的整合開發環境。eclipse中的pydev外...