###### tags: `MySQL` # MySQL進階物件 ## View(檢視表) ### View介紹 #### 簡述 一段select敘述組持一個view,呈現結果為該select呈現之結果 邏輯上才存在的虛擬資料表,不太占用硬碟空間 與table同層階級 在查詢(DQL)上與table相同 在新、刪、修時會受限制,符合某些條件才能使用 每次使用都會重新執行select,需考慮效能問題 #### 基底資料表 定義View時,所參考的資料來源即為基底資料表 基底資料表大多為Table,但也可以是一個View ex:table>view1>view2(view2基底為view1,view1基底為table) View為虛擬資料表,不會儲存資料,為虛擬結構 table為真正存資料的表格,為實體結構 ***修改或移除基底資料表時,可能會造成view產生錯誤*** #### 常見應用 簡化複雜的select敘述 當查詢資料需求變更時 隱藏資料 View設計成唯讀,避免程式端工程師修改資料 ### 新建View(語法參考課本) #### 語法補充 V_檢視表名稱>view 業界命名習慣 T_資料表名稱>table 可簡化使用欄位名(參考課本) 使用DML時,加上with會先檢查view的where子句 新、修:有影響 刪:無影響 若無where子句,則with check option無作用 create view V_TEST as select * from emp where deptno = 30 with check option; ==================== insert into V_TEST (....20); update V_TEST set DEPTNO=10; 以上會被阻擋(因為with check不相同deptno) #### 可安全異動資料的View 需符合以下條件 1.無計算欄位、函數欄位 2.基底資料表只有一個(不可join) 錯誤範例參考課本(只改一個人卻改到三個人) ## Index(索引) ### 簡述 會以(平衡樹B-Tree)儲存下一個檔案,占用大量硬碟空間 與Column同階層(以空間換時間) 查詢效能提升 異動時,index要重建,效能會下降 並非建越多越好 ### 使用 主要索引會自動產生,無法手動新增。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up