MySql基礎知識總結

陳俊成發表於2016-09-20

一、SQL語句的分類

  • DDL(資料定義語言):用來定義資料庫物件:比如庫、表、列、觸發器、檢視、函式、儲存過程等
(可以理解為建立語言)
資料庫級別:
      建立資料庫:Create database if not exists db_name;
      刪除資料庫:Drop database if exist db_name;
表級別
      建立表:Create Table stu(
            sid int primary key,
            sname varchar(25));
      刪除表:Drop Table 
此外:還有對資料庫和表級別上的修改
  • DML(資料操縱語言):用來運算元據庫記錄(資料)
操作的是記錄級別的
DML是對錶的記錄進行操作,包括插入操作、刪除操作、修改操作
  • DCL(資料控制語言):用來定義訪問許可權和安全級別
DCL這是對資料庫使用者、許可權級別的操作
  • DQL(資料查詢語言):用來查詢資料記錄
DQL是對錶的記錄進行查詢,以select開頭的SQL語句  

二、儲存引擎
MySQL資料庫儲存引擎總結:點選這裡
儲存引擎:與其他資料庫軟體不同,MySql資料庫軟體提供了一個名為儲存引擎的概念。儲存引擎是MySQL資料庫管理系統的一個重要特徵,在具體開發時,為了提高MySQL資料庫管理系統的使用效率和靈活性,可以根據實際需要來選擇儲存引擎。

SHOW ENGINES   檢視當前資料庫所支援的引擎
SHOW VARIABLES LIKE 'have%';     檢視當前資料庫所支援的引擎
SHOW VARIABLES LIKE 'storage_engine%';    檢視當前資料庫預設搜尋引擎

幾種常用的資料庫引擎:MyISAM 、InnoDB、MEMORY
這裡寫圖片描述
這裡寫圖片描述

更多詳細檢視《深入淺出:MySQL資料庫開發、優化與管理維護》

儲存引擎和資料型別,前者決定了資料庫物件表的型別,後者決定了資料庫物件表中儲存資料型別

三、索引
理解索引前先百度搜尋“鍵與索引的區別”,這裡推薦一篇點選這裡

索引(資料庫提高效能最常用的工具)主要是為了提高從表中檢索資料的速度。由於資料儲存在資料庫表中,所以索引是建立資料庫表物件上的,由表中的一個欄位或多個欄位生成的鍵組成,這些鍵儲存在資料結構(B樹雜湊表)中。索引分為B型樹索引和雜湊索引。

InnoDB和MyISAM儲存引擎支援B樹索引,不支援雜湊索引;MEMORY儲存引擎支援雜湊索引,也支援B樹索引

索引分為普通索引(INDEX),唯一索引(UNIQUE INDEX)(主鍵一定是唯一索引,唯一索引不一定是主鍵)、主鍵索引、全文索引(FULLTEXT INDEX)、多列索引。在以下情況建立索引:
 (1)經常被查詢的欄位,即在WHERE子句中出現的欄位;(如果不是唯一,也不是主鍵,可以建立普通索引)
 (2)在分組的欄位,即在GROUP BY子句中出現的欄位;(組別,很顯然不能是唯一索引,也不能是主鍵索引,所以只能是普通索引)
 (3)存在依賴關係的子表和父表之間的聯合查詢,即主鍵或外來鍵處;(可以是主鍵索引,或者是唯一索引)
 (4)唯一約束的欄位(唯一索引)

全文索引:主要關聯在資料型別為CHAR、VARCHAR和TEXT的欄位上、以便能夠更加
快速地查詢資料量較大的字串型別的欄位。(全文索引只能在MyISAM上建立)

(MyISAM的特點是:不支援事務,不支援外來鍵,訪問速度快(對事務完整性或者以selectInsert為主的應用基本都可以使用這個引擎)。
聯想:
    InnoDB的特點是:在事務上具有優勢,也支援具有提交、回滾、奔潰回覆能力的事務安裝,比MyISAM儲存引擎佔用更多的磁碟空間。
    MEMORY的特點是:使用記憶體來儲存資料,訪問速度是比MyISAM和InnoDB還要快的,但是安全上沒有保障,即伺服器斷點關機後,資料清零。
如果資料小並且能承受丟失的風險,可以使用這種引擎(用於那些內容變化不頻繁的程式碼表,或者作為統計操作的中間結果表))

多列索引:是指在建立索引時,所關聯的欄位不是一個欄位,而是多個欄位,雖然可以通過所關聯的欄位進行查詢,但是隻有查詢條件中使用了所關聯欄位中的第一個欄位,多列索引才會被使用(只有被使用的時,查詢的速度才會加快)

索引的優缺點:
優點:
(1)大大加快資料的檢索速度;   
(2)建立唯一性索引,保證資料庫表中每一行資料的唯一性;   
(3)加速表和表之間的連線;  

(如果是在:存在依賴關係的子表和父表之間的聯合查詢,即主鍵或外來鍵處;(可以是主鍵索引,或者是唯一索引))

(4)在使用分組和排序子句進行資料檢索時,可以顯著減少查詢中分組和排序的時間。

(如果是在:在分組的欄位,即在GROUP BY子句中出現的欄位;(組別,很顯然不能是唯一索引,也不能是主鍵索引,所以只能是普通索引))

缺點:
(1)索引需要佔用物理空間。   
(2)當對錶中的資料進行增加、刪除和修改的時候,索引也要動態的維護,降低了資料的維護速度。

( 查詢時速度增加,但在資料增加、刪除和修改的時候速度降低)

關於BTREE索引和HASH索引:

HASH索引:
(1)HASH索引查詢資料基本上能一次定位資料,所以用於使用=或<=>操作符號的等式比較
(2)HASH索引對ORDER
BY有加速作用
(3)只能用整個關鍵字搜尋一行, 而不能用字首(因為HASH索引需要準確的定位)

BTREE索引(btree索引就得在節點上挨著查詢了,很明顯在資料精確查詢方面hash索引的效率是要高於btree的):
(1)適用於>、<、>=、<=、BETWEEN AND、!=或者<>、LIKE(適用於範圍)

四、檢視

五、觸發器

相關文章