---
# System prepended metadata

title: MySQL進階物件
tags: [MySQL]

---

###### 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要重建，效能會下降
    並非建越多越好
### 使用
    主要索引會自動產生，無法手動新增。