
數(shù)據(jù)庫設(shè)計(jì)三范式:
第一范式:數(shù)據(jù)庫表的每一列都是不可分割的原子數(shù)據(jù)項(xiàng),即列不可拆分。第二范式:建立在第一范式的基礎(chǔ)上,要求數(shù)據(jù)庫表中的每個實(shí)例或記錄必須是可以唯一被區(qū)分的,即唯一標(biāo)識。第三范式:建立在第二范式的基礎(chǔ)上,任何非主屬性不依賴與其他非主屬性,即引用主鍵。
視圖
視圖是虛擬表,并不儲存數(shù)據(jù),只包含定義時(shí)的語句的動態(tài)數(shù)據(jù)。
create view view_name as sql查詢語句
存儲過程
一條或多條sql語句集合,其優(yōu)點(diǎn)為(濃縮:簡單/安全/高性能):
存儲過程能實(shí)現(xiàn)較快的執(zhí)行速度存儲過程允許標(biāo)準(zhǔn)組件是編程。存儲過程可以用流程控制語句編寫,有很強(qiáng)的靈活性,可以完成復(fù)雜的判斷和較復(fù)雜的運(yùn)算。存儲過程可被作為一種安全機(jī)制來充分利用。存儲過程能夠減少網(wǎng)絡(luò)流量
delimiter 分隔符
create procedure|proc proc_name()
begin
sql語句
end 分隔符
delimiter ; --還原分隔符,為了不影響后面的語句的使用
默認(rèn)的分隔符是;但是為了能在整個存儲過程中重用,因此一般需要自定義分隔符(除外)
show procedure status like ""; --查詢存儲過程,可以不適用like進(jìn)行過濾
drop procedure if exists;--刪除存儲過程
存儲過程和函數(shù)的區(qū)別?
相同點(diǎn):存儲過程和函數(shù)都是為了可重復(fù)的執(zhí)行操作數(shù)據(jù)庫的 sql 語句的集合。
1)存儲過程和函數(shù)都是一次編譯,就會被緩存起來,下次使用就直接命中已經(jīng)編譯好的 sql 語句,不需要重復(fù)使用。減少網(wǎng)絡(luò)交互,減少網(wǎng)絡(luò)訪問流量。
不同點(diǎn):標(biāo)識符不同,函數(shù)的標(biāo)識符是 function,存儲過程是 proceduce。
1)函數(shù)中有返回值,且必須有返回值,而過程沒有返回值,但是可以通過設(shè)置參數(shù)類型(in,out)來實(shí)現(xiàn)多個參數(shù)或者返回值。
2)存儲函數(shù)使用 select 調(diào)用,存儲過程需要使用 call 調(diào)用。
3)select 語句可以在存儲過程中調(diào)用,但是除了 select..into 之外的 select 語句都不能在函數(shù)中使用。
4)通過 in out 參數(shù),過程相關(guān)函數(shù)更加靈活,可以返回多個結(jié)果。
觸發(fā)器
在對表數(shù)據(jù)進(jìn)行變動的時(shí)候進(jìn)行具體的操作,有六種,分別為增刪改的前后操作。
create trigger trigger_name
ALTER|BEFORE select|update|delete
on 表
for each row
trigger_stmt
重點(diǎn):
只有表才支持觸發(fā)器,視圖和臨時(shí)表都不支持觸發(fā)器不支持更新和覆蓋,修改必須先刪除然后創(chuàng)建
分區(qū)表
分區(qū)表是將大表的數(shù)據(jù)分成稱為分區(qū)的許多小的子集,常見分區(qū)類型:Range、List、Hash、Key
查看是否支持分區(qū)表 show plugins
如果有partition就說明支持
在創(chuàng)建表時(shí)字符集后增加 partition by 分區(qū)類型(字段) partitions 4;
添加分區(qū) alter table 表 add partition (partition p4 values less than(2018))
交換分區(qū)對數(shù)據(jù)進(jìn)行歸檔
條件:mysql>=5.7 結(jié)構(gòu)相同 歸檔到的數(shù)據(jù)表一定要是非分區(qū)表 非臨時(shí)表,不能有外鍵約束 歸檔引擎要是archive,可以是innodb,但歸檔引擎占用空間更小,但只能是查詢操作
刪除分區(qū):alter table 分區(qū)表 drop partition 分區(qū)名
歸檔分區(qū):alter table 分區(qū)表 exchange partition 分區(qū)名 with table 歸檔表
RANGE 分區(qū):基于屬于一個給定連續(xù)區(qū)間的列值,把多行分配給分區(qū)。
partition by RANGE(字段)( partition p0 VALUES LESS THAN(10000),...PARTITION p3 VALUES
LESS THAN MAXVALUE);不包括上限
LIST 分區(qū):類似于按 RANGE 分區(qū),區(qū)別在于 LIST 分區(qū)是基于列值匹配一個離散值集合中的某個 值來進(jìn)行選擇。
partition by list(字段)(partition p0 values in (x,x,x,x)...);
HASH 分區(qū):基于用戶定義的表達(dá)式的返回值來進(jìn)行選擇的分區(qū),該表達(dá)式使用將要插入到表中的 這些行的列值進(jìn)行計(jì)算。這個函數(shù)可以包含MySQL 中有效的、產(chǎn)生非負(fù)整數(shù)值的任何表達(dá)式。
partition by hash(字段) partitions 4(
PARTITION p0,
PARTITION p1,
PARTITION p2,
PARTITION p3
);

KEY 分區(qū):類似于按 HASH 分區(qū),區(qū)別在于 KEY 分區(qū)只支持計(jì)算一列或多列,且 MySQL 服務(wù)器提供其自身的哈希函數(shù)。必須有一列或多列包含整數(shù)值。
partition by hash(字段) partitions 4(
PARTITION p0,
PARTITION p1,
PARTITION p2,
PARTITION p3
);
日志
Mysql主要有四種日志文件:
錯誤日志:記錄啟動,運(yùn)行或者停止 mysql 時(shí)出現(xiàn)的問題;
查詢?nèi)罩荆河涗浰衜syql的活動
二進(jìn)制日志:記錄更新過數(shù)據(jù)的所有語句
緩慢查詢?nèi)罩荆河涗洸樵兙徛娜魏尾樵?/p>
Archive引擎
這是一個只用于數(shù)據(jù)插入和查詢的引擎,其特點(diǎn)為:
只能對數(shù)據(jù)進(jìn)行插入和查詢不支持索引不支持事務(wù)存儲數(shù)據(jù)占用空間更小

寫在最后:? 小編為大家準(zhǔn)備了一些適合于1-5年以上開發(fā)經(jīng)驗(yàn)的java程序員面試涉及到的絕大部分面試題及答案做成了文檔和學(xué)習(xí)筆記文件以及架構(gòu)視頻資料免費(fèi)分享給大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并發(fā)等架構(gòu)技術(shù)資料),希望可以幫助到大家。
獲取方式:請大家關(guān)注并私信小編關(guān)鍵詞:“資料”即可獲取你需要的各類資料。