1.外鍵foreign key
順序要求:
刪數(shù)據(jù),先刪子表
添數(shù)據(jù),先加父表
創(chuàng)建表,先創(chuàng)父表
刪除表。先刪子表
2.foreign key語(yǔ)法:
例如:foreign key(no)references t_class(cno)
其中no表示當(dāng)前表字段, references代表引用的意思,cno表示父表字段
3.外鍵值可以為null
foreign key 需要注意的是:被引用字段至少具有unique約束
4.存儲(chǔ)引擎(engine)
MYISAM:(1).不支持事務(wù)
(2).三個(gè)文件組成一張表 frm(存儲(chǔ)格式)MYD(存儲(chǔ)數(shù)據(jù))MYI(索引文件)
優(yōu)點(diǎn):可被壓縮,節(jié)省存儲(chǔ)空間,可轉(zhuǎn)為只讀表,提高檢索效率
InnoDB(默認(rèn))
優(yōu)點(diǎn):支持事務(wù),行級(jí)鎖等,安全。服務(wù)器崩了會(huì)自動(dòng)恢復(fù)
缺點(diǎn):不能被壓縮
MEMORY
優(yōu)點(diǎn):查詢速度最快
缺點(diǎn):不支持事務(wù),數(shù)據(jù)易丟失
5.和事務(wù)transaction相關(guān)的語(yǔ)句只有:DML語(yǔ)句insert delete update(多條聯(lián)合)
transaction存在是為了保證數(shù)據(jù)完整,安全
6.start transaction 開啟事務(wù),(開始)
執(zhí)行insert(執(zhí)行記錄一下歷史操作,不會(huì)修改硬盤數(shù)據(jù))
執(zhí)行update(如上)
執(zhí)行delete(如上)
提交(commit 提交成功 文件改變,且清空歷史記錄)回滾(rollback 清空歷史記錄)事務(wù)(結(jié)束)
7.transaction事務(wù)的4大特性
1.原子性:transaction為最小工作單元,不可再分
2.一致性:多條DML語(yǔ)句同時(shí)成功或失敗
3.隔離性:transaction A 與 transaction B之間有隔離
4.持久性:數(shù)據(jù)庫(kù)必須要保證有一條數(shù)據(jù)永久地存放在磁盤中,transaction事務(wù)才算結(jié)束
8.事務(wù)的隔離性級(jí)別
一:讀未提交(read uncommitted)
對(duì)方事務(wù)還未提交,當(dāng)前事務(wù)可讀取到對(duì)方事務(wù)為提交的數(shù)據(jù)(Dirty Read臟讀現(xiàn)象)
二:讀已提交(read committed)
對(duì)方提交后,我方事務(wù)才可讀取到數(shù)據(jù)(解決了Dirty Read,但不可重復(fù)讀)
三:可重復(fù)讀:(repeatable read)
解決了:不可重復(fù)讀問題。存在問題:讀取到的數(shù)據(jù)是幻象
四:序列化/串行化讀
解決所有問題但是效率低,事務(wù)需要排隊(duì)
9.mysql中的事務(wù)時(shí)支持自動(dòng)提交的(start transaction關(guān)閉自動(dòng)提交)
10.設(shè)置事務(wù)的全局隔離級(jí)別
set global transaction isolation level (后面跟級(jí)別)read uncommitted (讀未提交)
查看級(jí)別
select @@global.tx_isolation;(5.0)
.transaction_isolation(8.0)
11.啥時(shí)候添加索引?
(1).數(shù)據(jù)量龐大
(2).該字段很少的DML操作(因?yàn)樽侄芜M(jìn)行修改操作,索引也需要維護(hù))
(3).該字段經(jīng)常出現(xiàn)在where子句中
12.主鍵(primary key)和具有unique約束的字段會(huì)自動(dòng)添加索引(根據(jù)primary key查詢效率較高)
13.select ename, sal from emp where ename='smith'
當(dāng)ename字段無(wú)索引的時(shí)候,會(huì)進(jìn)行全表掃描。加索引的時(shí)候,語(yǔ)句會(huì)根據(jù)索引掃描,快速定位。
14.查看sql的執(zhí)行計(jì)劃
explain (后面跟查詢語(yǔ)句 select ename,sal from emp where sal=5000)
15.創(chuàng)建索引的語(yǔ)法
create index sal_index on emp(sal) 在emp表的sal字段加sal_index索引
16.刪除索引的語(yǔ)法
drop index 索引名 on 表名; (mysql中)
17.索引的實(shí)現(xiàn)原理
通過B Tree 縮小掃描范圍,底層索引進(jìn)行了排序,分區(qū),索引會(huì)攜帶數(shù)據(jù)在表中的物理地址,最終通過索引檢索到
數(shù)據(jù)后,獲取到關(guān)聯(lián)的物理地址,通過物理地址定位表中的數(shù)據(jù),效率最高。
18.索引什么時(shí)候失效?
當(dāng)模糊查詢的時(shí)候,第一個(gè)通配符使用的是%
19.索引分類
單一索引:?jiǎn)巫侄渭铀饕?br>
復(fù)合索引:多字段加索引
主鍵:primary key自動(dòng)加索引
唯一:unique約束會(huì)自動(dòng)加索引
20.view視圖就是同一張表的數(shù)據(jù),通過不同角度去看待
21.創(chuàng)建視圖(只有dql才可以用視圖對(duì)象創(chuàng)建)
create view myView as select empno,ename from emp;
刪除
drop view myView;
22.對(duì)視圖進(jìn)行增刪改查,會(huì)影響到原表數(shù)據(jù)
23.視圖(view)可隱藏表的實(shí)現(xiàn)細(xì)節(jié),適合保密級(jí)別高的系統(tǒng)。數(shù)據(jù)庫(kù)只對(duì)外提供相關(guān)的視圖
24.設(shè)計(jì)三范式(不會(huì)出現(xiàn)數(shù)據(jù)冗余)空間浪費(fèi)
(1)第一范式:任何一張表都應(yīng)該有主鍵,且每個(gè)字段原子性不可再分
(2)第二范式:建立在第一范式的基礎(chǔ)上,且所有的非主鍵字段完全依賴主鍵,不能產(chǎn)生部分依賴。(多對(duì)多,三張表,關(guān)系表兩個(gè)外鍵)
(3)第三范式:建立在第二范式的基礎(chǔ)上,所有非主鍵字段直接依賴主鍵,不可產(chǎn)生傳遞依賴。(一對(duì)多,兩張表,多的表加外鍵)
25.實(shí)際開發(fā)中,為了滿足客戶需求,會(huì)拿冗余換執(zhí)行速度
26.一對(duì)一有兩種設(shè)計(jì)方案:外鍵唯一(foreign key),主鍵共享(primary key)