資料庫複習(四)1、檢視:create view 建立檢視
定義乙個名稱:
a、定義對應關係,檢視--不是真實的表,只能查資料,不能刪除資料
temp1 <---> select * from score where course_id in (1,2)
b、呼叫temp1 :僅僅是把之前一張表的語句拿過來執行
select * from score where course_id in(1,2)
c、執行時才獲取資料
d、建立的檢視也儲存在資料庫中:使用的時候當錶用,也可以進行拼接關聯
2、儲存過程
(建立儲存過程類似函式但不是函式)
create procedure c1
sql語句
#mysql客戶端
call c1()#執行儲存過程
a、可寫複雜邏輯
b、引數 in out inout
c、結果集:select ...
d、myaql的終止符換成$$(myaql預設以;為終止符),用完之後再修改回;為終止符
3、動態sql
a、sql是字串
b、字串格式化 ? execute proc using @p1
4、觸發器
a、為某乙個表:
insert 前後
update 前後
delete 前後
b、old,new
c、刪除多行,插入多行,更新多行
#刪除之前,將刪除的值新增到另外一張表
5、事務 innodb:start transaction 開啟乙個事務
commit 與commit之間的操作執行時出現問題時就會事務回滾
6、函式有兩類:
(1)mysql內建函式,定義函式處理資料
(2)自定義函式
注:sql不允許返回值,不允許return返回
7、索引:兩類功能,約束和加速查詢
約束:主鍵
外來鍵唯一
普通組合
加速查詢
列索引,建立檔案,索引列資料全部拿出
以二叉樹的形式儲存
b-tree索引
雜湊索引(一般用不到因為innodb不支援)
索引種類:
普通索引 加速查詢
唯一索引 加速查詢,約束列資料不能重複,null
主鍵索引 加速查詢,約束列資料不能重複,不能null
組合索引 多列可以建立乙個索引檔案
(1)普通索引
create index 索引名稱 on 表(列名)
(2)唯一索引
create unique index 索引名 on 表(列名)
刪除索引 drop unique index 索引名 on 表(列名)
(3)主鍵索引(功能強大,多)
不能為空,不能重複
alter table 表名 add primary key(列名);
alter table 表名 drop primary key
alter table 表名 modify 列名 int,drop primary key;
(4)組合索引:將n個列組合成乙個索引
普通組合索引:
無約束聯合唯一索引:
由於,兩列資料同時不相同,才能插入,不然報錯
查詢時遵循乙個規則:最左匹配
name,pwd
select * from tb1 where name = 'eric' #會走索引
select * from tb1 where name = 'eric' and pwd = '123' #會走索引
select * from tb1 where pwd = '123' #不會走索引
name,pwd,email
select * from tb1 where name = 'eric' #會走索引
select * from tb1 where pwd = '123' #不會走索引
select * from tb1 where email = 'ericc' #不會走索引
select * from tb1 where name = 'ericc' and pwd = '123' #會走索引
8、覆蓋索引
select * from tb where nid = 1
#先去索引中找
#再去資料表中找
select nid from tb where nid < 10
#先去索引中找
--情況應用上索引,並且不用去資料表中操作,覆蓋索引0
--只需要在索引中就能獲取到資料時
9、合併索引
nid name(單獨索引) email(單獨索引) pwd
select * from tb where name = 'eric'
select * from tb where email= '[email protected]'
select * from tb where name ='eric' and email='[email protected]'
nid name(組合索引) email(合併索引) pwd
#最左字首
select * from tb where name = 'eric'
select * from tb where email= '[email protected]' #####無法滿足#####
select * from tb where name ='eric' and email='[email protected]'
10、執行計畫 - 相對比較準確的表達出當前sql執行狀況
是否走索引,不走索引
explain sql語句
(1)explain sql語句
type:all - 全資料掃瞄
type:index - 全索引掃瞄
但效率都不高
(2)limit
select * from tb where email= '[email protected]'
select * from tb where email= '[email protected]' limit 1;
----sql: all、index,都是有優化的餘地的----
(3)range對索引列進行範圍查詢 select * from tb1 where name < 'eric';
between and
in> >= < <= 操作
注意:!= 和 > 符號
(4)如何命中索引
注:用like的額時候%在前面不走索引
轉船也不會走索引
資料型別不一致也不會走索引
!= 和 > 也不走索引
(5)指定列前幾個字元建立索引
text,blob必須要首席執行官度
資料庫複習(四)
關係模式的分解特性 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf bcnf 參考部落格 設有關係模式r u x和y是屬性集u的子集,函式依賴 functional dependency,簡記為fd 是形為x y的乙個命題,只要r是r的當前關係,對r中任意兩個元組t和s,都有t x s ...
資料庫複習
這是本科資料庫課程的複習。考試內容主要是資料庫的基本概念,資料庫設計資料庫系統的優化和恢復。至於設計底層的資料庫管理系統原理,坑先挖了,日後補,是我計畫中的一門課程。目錄資料庫系統 一般由資料庫。資料庫管理系統 及其開發工具 應用系統 資料庫管理員構成。目的 儲存資訊並支援使用者檢索和更新所需的資訊...
資料庫複習
資料庫複習 2016年6月15日 21 34 main logical data model ldm 邏輯資料模型 1.邏輯資料模型的三要素 data structure 資料結構 data operation 資料操縱 data constraints 資料約束 2.關係模型的歷史 提出關係代數 ...