Mysql面試知識點總結(進階篇)

上一篇主要介紹一些基礎的mysql知識點,這一篇咱們介紹一下mysql比較重要但在開發中咱們程序員不多知道的幾個大點(自覺得是的觀點)。
數據庫設計三範式:mysql

  1. 第一範式:數據庫表的每一列都是不可分割的原子數據項,即列不可拆分。
  2. 第二範式:創建在第一範式的基礎上,要求數據庫表中的每一個實例或記錄必須是能夠惟一被區分的,即惟一標識。
  3. 第三範式:創建在第二範式的基礎上,任何非主屬性不依賴與其餘非主屬性,即引用主鍵。

視圖

視圖是虛擬表,並不儲存數據,只包含定義時的語句的動態數據。程序員

create view view_name as sql查詢語句

存儲過程

一條或多條sql語句集合,其優勢爲(濃縮:簡單/安全/高性能):sql

  • 存儲過程能實現較快的執行速度
  • 存儲過程容許標準組件是編程。
  • 存儲過程能夠用流程控制語句編寫,有很強的靈活性,能夠完成複雜的判斷和較複雜的運算。
  • 存儲過程可被做爲一種安全機制來充分利用。
  • 存儲過程可以減小網絡流量
delimiter 分隔符
create procedure|proc proc_name()
begin
    sql語句
end 分隔符
delimiter ;    --還原分隔符,爲了避免影響後面的語句的使用
默認的分隔符是;可是爲了能在整個存儲過程當中重用,所以通常須要自定義分隔符(除\外)
show procedure status like ""; --查詢存儲過程,能夠不適用like進行過濾
drop procedure if exists;--刪除存儲過程

存儲過程和函數的區別?數據庫

相同點:存儲過程和函數都是爲了可重複的執行操做數據庫的 sql 語句的集合。
1)存儲過程和函數都是一次編譯,就會被緩存起來,下次使用就直接命中已經編譯好的 sql 語句,不須要重複使用。減小網絡交互,減小網絡訪問流量。
不一樣點:標識符不一樣,函數的標識符是 function,存儲過程是 proceduce。
1)函數中有返回值,且必須有返回值,而過程沒有返回值,可是能夠經過設置參數類型(in,out)來實現多個參數或者返回值。
2)存儲函數使用 select 調用,存儲過程須要使用 call 調用。
3)select 語句能夠在存儲過程當中調用,可是除了 select..into 以外的 select 語句都不能在函數中使用。
4)經過 in out 參數,過程相關函數更加靈活,能夠返回多個結果。

觸發器

在對錶數據進行變更的時候進行具體的操做,有六種,分別爲增刪改的先後操做。編程

create trigger trigger_name 
ALTER|BEFORE select|update|delete
on 表
for each row
trigger_stmt

重點:緩存

  • 只有表才支持觸發器,視圖和臨時表都不支持
  • 觸發器不支持更新和覆蓋,修改必須先刪除而後建立

分區表

分區表是將大表的數據分紅稱爲分區的許多小的子集,常見分區類型:Range、List、Hash、Key安全

查看是否支持分區表 show plugins 
若是有partition就說明支持
在建立表時字符集後增長 partition by 分區類型(字段) partitions 4;
添加分區 alter table 表 add partition (partition p4 values less than(2018))

交換分區對數據進行歸檔服務器

條件:mysql>=5.7 結構相同 歸檔到的數據表必定要是非分區表 非臨時表,不能有外鍵約束 歸檔引擎要是archive,能夠是innodb,但歸檔引擎佔用空間更小,但只能是查詢操做
刪除分區:alter table 分區表 drop partition 分區名
歸檔分區:alter table 分區表 exchange partition 分區名 with table 歸檔表
  • RANGE 分區:基於屬於一個給定連續區間的列值,把多行分配給分區。
partition by RANGE(字段)( partition p0 VALUES LESS THAN(10000),...PARTITION p3 VALUES

LESS THAN MAXVALUE);不包括上限網絡

  • LIST 分區:相似於按 RANGE 分區,區別在於 LIST 分區是基於列值匹配一個離散值集合中的某個 值來進行選擇。
partition by list(字段)(partition p0 values in (x,x,x,x)...);
  • HASH 分區:基於用戶定義的表達式的返回值來進行選擇的分區,該表達式使用將要插入到表中的 這些行的列值進行計算。這個函數能夠包含MySQL 中有效的、產生非負整數值的任何表達式。
partition by hash(字段) partitions 4(  
     PARTITION p0,  
     PARTITION p1,  
     PARTITION p2,  
     PARTITION p3
);

clipboard.png

  • KEY 分區:相似於按 HASH 分區,區別在於 KEY 分區只支持計算一列或多列,且 MySQL 服務器提供其自身的哈希函數。必須有一列或多列包含整數值。
partition by hash(字段) partitions 4(  
     PARTITION p0,  
     PARTITION p1,  
     PARTITION p2,  
     PARTITION p3
);

日誌

Mysql主要有四種日誌文件:less

錯誤日誌:記錄啓動,運行或者中止 mysql 時出現的問題;
查詢日誌:記錄全部msyql的活動
二進制日誌:記錄更新過數據的全部語句
緩慢查詢日誌:記錄查詢緩慢的任何查詢

Archive引擎

這是一個只用於數據插入和查詢的引擎,其特色爲:

  1. 只能對數據進行插入和查詢
  2. 不支持索引
  3. 不支持事務
  4. 存儲數據佔用空間更小
相關文章
相關標籤/搜索