日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql进阶知识_Mysql面试知识点总结(进阶篇)

發布時間:2024/7/23 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql进阶知识_Mysql面试知识点总结(进阶篇) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇主要介紹一些基礎的mysql知識點,這一篇我們介紹一下mysql比較重要但在開發中我們程序員很少知道的幾個大點(自以為是的觀點)。

數據庫設計三范式:

第一范式:數據庫表的每一列都是不可分割的原子數據項,即列不可拆分。

第二范式:建立在第一范式的基礎上,要求數據庫表中的每個實例或記錄必須是可以唯一被區分的,即唯一標識。

第三范式:建立在第二范式的基礎上,任何非主屬性不依賴與其他非主屬性,即引用主鍵。

視圖

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

create view view_name as 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

);

KEY 分區:類似于按 HASH 分區,區別在于 KEY 分區只支持計算一列或多列,且 MySQL 服務器提供其自身的哈希函數。必須有一列或多列包含整數值。

partition by hash(字段) partitions 4(

PARTITION p0,

PARTITION p1,

PARTITION p2,

PARTITION p3

);

日志

Mysql主要有四種日志文件:

錯誤日志:記錄啟動,運行或者停止 mysql 時出現的問題;

查詢日志:記錄所有msyql的活動

二進制日志:記錄更新過數據的所有語句

緩慢查詢日志:記錄查詢緩慢的任何查詢

Archive引擎

這是一個只用于數據插入和查詢的引擎,其特點為:

只能對數據進行插入和查詢

不支持索引

不支持事務

存儲數據占用空間更小

STRAIGHT_JOIN

在對多表連接的查詢中, MySQL優化器要確定以誰為驅動表,也就是說以哪個表為基準,在處理此類問題時,MySQL優化器采用了簡單粗暴的解決方法:哪個表的結果集小,就以哪個表為驅動表, 使用STRAIGHT_JOIN可以指定以左表為驅動表。

總結

以上是生活随笔為你收集整理的mysql进阶知识_Mysql面试知识点总结(进阶篇)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。