1. 程式人生 > >mysql 一 基本資料型別 和 儲存引擎

mysql 一 基本資料型別 和 儲存引擎

簡單的說明

[ ]中括號中內容為可選

{ }大括號中內容為必選

| 表示選擇(可以選擇其一 也可以都選擇)

; 結尾 以表格的形式顯示結果  同 \g

\G 結尾 以列表的形式顯示結果

一 資料庫和儲存引擎

資料庫DATABASE

資料庫可由 字母 數字 下劃線 $ 組成 .但不能有純數字構成,僅有_或$構成也是可以的

名稱 最長64字元 別名 256個字元 

預設字符集 my.ini default-character-set 

        增:   建立資料庫

               1  CREATEDATABASE [IF NOT EXISTS] dbname [指定字符集];

   2.  CREATE  SCHEMA    [IF NOT EXISTS] dbname ;

         指定字符集:在建立資料庫語句後新增 default character set =字符集; 或 default character utf8;

        查: SHOW DATABASES ;

        改: 修改相關引數(字符集 校對規則),不能修改資料庫的名字

                 ALTER { DATABASE | SCHEMA} [dbname] {修改字符集 | 修改校對規則}

                       若未指定dbname 則預設當前資料庫

                 修改字符集 :  [DEFAULT] CHARCTER SET [=]字符集

                 修改校對規則 :   [DEFAULT] COLLATE [=] 校對規則名稱

                     collation :校對、排序規則 ,校對規則是依賴字符集而存在的,不同的字符集可能擁有不同的排序規則

                 校對規則名稱由: “字符集_地區名_校對規則”

                例如:big5_chinese_ci  big5為字符集 ci大小寫不敏感(字尾還有:cs 表大小寫敏感,bin 表二進位制編碼比較)

         要求: 其使用者必選有修改許可權

       刪:DROP DATABASE dbname ;

       使用: USE dbname;

儲存引擎 ENGINE

通過設定表的ENGINE屬性 來指定表的儲存引擎   ENGINE =儲存引擎型別

  1. 儲存資料
  2. 為儲存的資料建立索引
  3. 更新 查詢資料

   查詢儲存引擎:  1.查詢支援的全部引擎 SHOW DATABASES ;

                           2.查詢預設的儲存引擎 SHOW VARIABLES語句檢視系統變數及其值 再經過like

                                                       SHOW VARIABLES like '%storage_engine%'

mysql> show engines \G
*************************** 1. row ***************************
      Engine: InnoDB
     Support: YES
     Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
          XA: YES
  Savepoints: YES
*************************** 2. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions   XA Savepoints: NO  
*************************** 3. row ***************************
      Engine: MEMORY
     Support: YES
     Comment: Hash based, stored in memory, useful for temporary tables
Transactions   XA Savepoints: NO  
*************************** 4. row ***************************
      Engine: BLACKHOLE
     Support: YES
     Comment: /dev/null storage engine (anything you write to it disappears)
Transactions   XA Savepoints: NO  
*************************** 5. row ***************************
      Engine: MyISAM
     Support: DEFAULT
     Comment: MyISAM storage engine
Transactions   XA Savepoints: NO  
*************************** 6. row ***************************
      Engine: CSV
     Support: YES
     Comment: CSV storage engine
Transactions   XA Savepoints: NO  
*************************** 7. row ***************************
      Engine: ARCHIVE
     Support: YES
     Comment: Archive storage engine
Transactions   XA Savepoints: NO  
*************************** 8. row ***************************
      Engine: PERFORMANCE_SCHEMA
     Support: YES
     Comment: Performance Schema
Transactions   XA Savepoints: NO  
*************************** 9. row ***************************
      Engine: FEDERATED
     Support: NO
     Comment: Federated MySQL storage engine
Transactions   XA Savepoints: NULL
9 rows in set (0.00 sec)

mysql> show variables like '%storage_engines%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| disabled_storage_engines |       |
+--------------------------+-------+
1 row in set, 1 warning (0.00 sec)

InnoDB

InnoDB 給Mysql表 提過了事務,回滾,崩潰修復能力 和多版本併發控制的事務安全

但 讀寫效率稍差 佔用的資料空間相對比較大

特性

  1. 事務處理能力
  2. 支援自動增長列 AUTO_INCREMENT ,其值必須唯一且為空
  3. 提供外來鍵約束
  4. 表結構儲存在 .frm檔案                                                                                                                                                                             資料儲存在 innodb_data_home_dir                                                                                                                                                       索引儲存在innodb_data_file_path

適用

  • 更新密集的表:適合處理多重併發的更新請求
  • 事務             :InooDB是唯一支援事務的標準Mysql儲存引擎
  • 自動災難恢復

MyISAM

佔用空間小,處理速度快

但不支援事務的完整性和併發性

管理非事務的表,提供高速的儲存和檢索,支援全文搜尋

適用於 對應用的完整性 併發性要求低 的非事務表

.frm  儲存表結構 .MYD儲存資料

.MYI 儲存索引

1.MyISAM 靜態 若不是用 xBLOB xTEXT VARCHAR型別,Mysql就會自動使用靜態MyISAM格式

2.MyISAM 動態 有 xBLOB xTEXT VARCHAR型別 ,動態格式的表佔用空間小 ,若修改表的內容可能造成位置的移動,將會產生碎片,碎片的積累將導致效能的下降 

  • 儘可能使用靜態資料結構
  • 使用OPTIMIZE TABLE語句,整理表的碎片,恢復由更新或刪除導致的空間丟失

3.MyISAM壓縮

只讀的表 使用myisampack工具將其轉換為MyISAM壓縮表來減少空間

 MEMORY

1.使用儲存在記憶體中的內容來建立表,並且所以資料也存放在記憶體中

2.每個基於MEMORY儲存引擎的表實際對應一個磁碟檔案,其名與表名相同 副檔名為 .frm 僅儲存表的結構

而資料檔案儲存在記憶體

3.預設使用雜湊(HASH)索引,速度比B型樹(BTRE)索引要快

優點: MEMORY表大小受到限制,處理速度快 

但資料易丟失 生命週期短,安全性不高

適用於 較小的資料庫表

二 資料型別

BIT資料型別儲存位欄位值,並且支援MyISAM、MEMORY、InnoDB和BDB表。

當指定不合法的MySQL不能表示的值時使用"零"值

BOOL 1位元組 自動轉換成TINYINT(1)
TINYINT 1位元組 YEAR                        YYYY
SMALLINT 2 位元組
MEDIUMINT 3 位元組 DATE                                 YYYY-MM-DD TIME              HH:MM:SS
INT或INTEGER 4 位元組 TIMESTAMP        YYYYMMDD HHMMSS 混合日期和時間值,時間戳
BIGINT 8位元組 DATETIME            YYYY-MM-DD HH:MM:SS 混合日期和時間值
FLOAT

4 位元組FLOAT(M,D)

FLOAT(M)

M最大位數,D小數精度 整數部分為M-D

FLOAT(M) 未發現作用

DOUBLE 8 位元組DOUBLE(M,D) M最大位數,D小數精度 整數部分為M-D
DEC或DECIMAL

DECIMAL(M,D) 

要求M>=D 

M最大位數,D小數精度 整數部分為M-D

字串型別指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET

型別 大小 用途
CHAR 0-255位元組 定長字串

儲存和檢索的方式不同

最大長度和是否尾部空格被保留等方面也不同

儲存或檢索過程中不進行大小寫轉換

char (M)  固定的列
VARCHAR 0-65535 位元組 變長字串 節省空間
TINYBLOB 0-255位元組 不超過 255 個字元的二進位制字串
TINYTEXT 0-255位元組 短文字字串
BLOB 0-65 535位元組 二進位制形式的長文字資料 要搜尋的內容區分大小寫
TEXT 0-65 535位元組 長文字資料 要搜尋的內容不區分大小寫
MEDIUMBLOB 0-16 777 215位元組 二進位制形式的中等長度文字資料
MEDIUMTEXT 0-16 777 215位元組 中等長度文字資料
LONGBLOB 0-4 294 967 295位元組 二進位制形式的極大文字資料
LONGTEXT 0-4 294 967 295位元組 極大文字資料

BINARY 和 VARBINARY 類似於 CHAR 和 VARCHAR,不同的是它們包含二進位制字串而不要非二進位制字串。也就是說,它們包含位元組字串而不是字元字串。這說明它們沒有字符集,並且排序和比較基於列值位元組的數值值

BLOB 是一個二進位制大物件,可以容納可變數量的資料。有 4 種 BLOB 型別:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。區別在於可容納儲存範圍不同。

有 4 種 TEXT 型別:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。

資料型別 最大值 說明 適用
Enum("value1","value2",....) 65535 該型別可以容納所列值之一成為NULL 將列中的內容限定在一種選擇
Set("value1","value2",....) 64 可容納一組值或NULL 允許列中的有多於一個的條目