MySQL 三年模擬五年面試之一網打盡系列(1)----- MySQL 基礎

bossaiguo發表於2019-08-03

MySQL 資料型別

一、整數型別

  1. 包括:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
  2. 屬性:UNISINGED
  3. 取值範圍:
    - TINYINT:有符號的範圍是-128 到 - 127,無符號的範圍是 從 0 到 255 的整型資料。一位大小為 1 位元組。
    - SMALLINT:有符號的範圍是-2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型資料,無符號的範圍是0到65535。一位大小為 2 個位元組。
    - MEDIUMINT:有符號的範圍是-8388608到8388607,無符號的範圍是0到16777215。 一位大小為3個位元組。
    - INT:有符號的範圍是-2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型資料(所有數字),無符號的範圍是0到4294967295。一位大小為 4 個位元組。
    - BIGINT:有符號的範圍是-2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型資料(所有數字),無符號的範圍是0到18446744073709551615。一位為 8 個位元組。
  4. 注意:可以為整數型別指定寬度,例如:INT(11)、對大多數應用是沒有意義的,他不會限制值的合法範圍,只會影響顯示字元的個數。

二、實數型別

  1. 包括:FLOAT、DOUBLE、DECIMAL
  2. 介紹:DECIMAL可儲存比BIGINT還大的整數;可以用於儲存精確的小數。FLOAT和DOUBLE型別支援使用標準的浮點進行近似計算

三、字串型別

  1. 包括:VARCHAR、CHAR、TEXT、BLOB
  2. 注意:
    - varchar 型別使用者儲存可變長字串,他比定長型別更節省空間。varchar使用1或者2個額外位元組記錄字串的長度,列長度小於255位元組,使用一個位元組表示,否則使用2個。如果儲存內容超出指定長度,會被截斷。
    - char 是定長的,根據定義的字串長度,分配足夠的空間。 char會根據需要採用空格進行填充以方便比較。 char適合儲存很短的字串,或者所有值都接近同一長度(比如MD5加密的密碼:char(32))。char長度超出設定的長度,會被截斷。
    - 對於經常變更的資料,char比varchar更好,char不容易產生碎片。對於非常短的列,char比varchar在儲存空間上更有效率。更長的列會消耗更多的記憶體。
    - 儘量避免使用 blob/text 型別,查詢會使用臨時表,導致嚴重的效能開銷

四、列舉型別(EUNM)

  1. 注意細節:
    - 有時可以使用列舉代替常用的字串型別,把不重複的集合儲存成一個預定義的集合。
    - 列舉型別非常緊湊,把列表值壓縮到一個或者兩個位元組內部儲存的是整數。
    - 儘量避免使用數字作為列舉的常量,避免混亂。
    - 排序是按照內部儲存的整數進行排序的。
    - 列舉表會使表大小大大減小

五、日期和時間

- 儘量使用TIMESTAMP,比DATETIME空間效率高
- 用整數儲存時間戳的格式通常不方便處理
- 如果需要儲存微秒,可以使用bigint儲存

資料表引擎

InnoDB表引擎

- 預設事務型引擎,最主要最廣泛的儲存引擎,效能非常優秀
- 資料儲存在共享表空間,可以通過配置分開
- 對主鍵查詢的效能高於其他型別的儲存引擎
- 內部做了很多優化,從磁碟讀取資料時自動在記憶體構建hash索引,插入資料時自動構建插入緩衝區
- 通過一些機制工具支援真正的熱備份
- 支援崩潰後的安全恢復
- 支援行級鎖
- 支援外來鍵

MyISAM表引擎

- 5.1版本前,MyISAM是預設的儲存引擎
- 擁有全文索引、壓縮、空間函式
- 不支援事務和行級鎖,不支援奔潰後的安全恢復
- 表儲存在兩個檔案,MYD和MYI
- 設計簡單,某些場景下效能很好

鎖機制

表鎖是日常開發中常見的問題,因此也是面試當中最常見的考察點,當多個查詢同一時刻進行資料修改時,就會產生併發控制的問題。共享鎖和排他鎖,其實就是讀鎖和寫鎖。

- 寫鎖:排他的,一個寫鎖會阻塞其他的寫鎖和讀鎖,這樣可以只允許一個人進行寫入,防止其他使用者讀取正在寫入的資源。
- 讀鎖:共享的,不堵塞。多個使用者可以同時讀一個資源,互補干擾
- 表鎖:系統效能開銷最小,會鎖定整張表,MyISAM使用表鎖
- 行鎖:最大程度地支援併發處理,但是也帶來了最大的鎖開銷,InnoDB 實現行級鎖

相關文章