iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0
佛心分享-IT 人自學之術

從零開始的MySQL開發旅程系列 第 11

Day11 建立檢視表、觸發器、事件

  • 分享至 

  • xImage
  •  

檢視表(view)

  • 作用:根據查詢後輸出的虛擬資料表,可以依照需求來顯示的節結果集之內容。例如簡化複雜的查詢、隱藏具敏感性或無關的資料。
  • 檢視表一定會保持最新狀況,跟著資料表做最新資料的同步
  • 建立檢視表後會儲存在MYSQL資料庫中,可以隨時使用命令select來查詢檢視表
  • 建立檢視表
    • 使用create view語法
    • 語法:
      create 檢視表名稱(通常以開頭v_) as
      select 欄位1,欄位2....
      from 資料表名稱
      where 條件; 
      
  • 使用檢視表
    • 命令select
    • 語法:select 欄位1,欄位2....from 檢視表名稱;
    • 也可以搭配索引來查詢檢視表
  • 更新檢視表
    • 使用update陳述式
    • 語法:
     update 檢視表名稱
      set 資料欄名稱 = '更新後的值'
      where 資料欄名稱 = '原始值';
    
  • 刪除檢視表
    • 命令drop view
    • 語法:drop view 檢視表名稱;

觸發器(trigger)

  • 作用:在資料表中插入、更新、刪除的前後,會自動觸發或執行的資料庫物件,這樣可以在不修改程式代碼的情況下自動執行一些任務
  • 常見用途:追蹤資料表的異動情況、儲存在資料庫之前先提升資料的品質

利用觸發器稽核資料-after

  • 稽核表(audit table),用來追蹤異動(寫在insert陳述式中)
    • 記錄誰修改資料-函式user()
    • 修改什麼資料-函式concat()建立字串
    • 修改的日期時間-函式noe()
  • 設定在資料異動後觸發-after
    • 作用:追蹤資料表的異動情況
    • 種類
      • AI型觸發器(after insert trigger)
        • 在資料插入之後觸發,在稽核表中寫入紀錄
        • 命名以_ai做結尾
        • 建立AI型觸發器
          • 以關鍵字after來表示觸發器什麼時候觸發
          • 當每一列資料插入資料表中時就會執行關鍵字begin、end之間的陳述式
          • 利用insert陳述式插入資料到稽核表,呼叫上述提到的三個函式,並以關鍵字new存取新插入資料表的值,將稽核資料插入資料表
          • 語法:
            https://ithelp.ithome.com.tw/upload/images/20240830/201687592rRo5zz6Pz.png
      • AD型觸發器(after delect trigger)
        • 在資料刪除之後觸發
        • 命名以_ad做結尾
        • 建立AD型觸發器
          • 寫法與AI型觸發器相同,只差在AD觸發器是以關鍵字old取代AI觸發器的關鍵字new,因為刪除資料漏財觸發所以資料欄中只剩old值
      • AU型觸發器(after update trigger)
        • 在資料表更新資料列時觸發
        • 命名以_au做結尾
        • 建立AU型觸發器
          • 建立使用者變數@change_msg,用於建立字串,保存異動的資料,列出每個更新過的資料欄
          • 檢查每個資料欄是否有異動過
          • 若有異動過就就把新的值存入@change_msg
          • 每個資料欄都完成比對後就把@change_msg插入稽核表

利用觸發器影響資料-before

  • 設定在資料列異動之前就先觸發
  • 作用:更改已寫入的資料、防止資料表插入或刪除資料列
  • 種類
    • BI型觸發器(before insert trigger)
      • 在資料插入之前觸發
      • 用途如插入資料前檢查是否不符合插入條件
      • 命名以_bi做結尾
      • 建立BI型觸發器
        • 寫法大致與AI觸發器。
        • 可以用if條件式加上關鍵字new檢查插入的新值是否符合條件
        • 語法:
          https://ithelp.ithome.com.tw/upload/images/20240830/20168759PZwzOKdWfi.png
    • BU型觸發器(before update trigger)
      • 在資料表更新資料列前觸發
      • 命名以_bu做結尾
      • 用途是在插入更新資料前先檢查是否符合條件,避免更新過後出現不符的值
      • 寫法大致與BI觸發器相同
    • BD型觸發器(before delect trigger)
      • 在資料刪除之前觸發
      • 命名以_bd做結尾
      • 用途是在刪除前先以觸發器檢查是否符合刪除條件,若不符合會回傳錯誤
      • 使用signal陳述式 + 關鍵字sqlstate +代碼 (由五個字元組成代碼,用於識別錯誤、警告)

事件

  • 又稱已排定事件,會值型定義出的功能
  • 命名以e_做開頭
  • 事件排成器event scheduler
    • 管理排成和執行事件
    • 可設關或關
  • 建立事件(沒截止時間)
    • 需先以命令use設定要用的資料庫
    • 在建立新事件前要確保舊的刪除
    • 每個事件開頭以關鍵字on schedule,來指定時間。
    • 若為重複發生的要接every和觸發時間間隔,且要設定開始與結束的時間
    • 以命令do來定義要做的任務,事件主體並以begin開始end結束
  • 建立事件(有截止時間)
    • 需使用關鍵字ends
    • 語法:
     on schedule 時間間隔
     starts '開始時間'
     ends '結束時間'
    
  • 檢查錯誤事件
    • 資料庫performance_schema用來監控MYSQL效能
    • 資料表error_log用來存事件的診斷訊息

下一章:自訂函式、程序


上一篇
Day10 插入、更新、刪除資料
下一篇
Day12 自訂函式、程序
系列文
從零開始的MySQL開發旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言