iT邦幫忙

2024 iThome 鐵人賽

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

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

Day15專題二 利用觸發器追蹤投票者資料異動(中)

  • 分享至 

  • xImage
  •  

專題二 加入Before型觸發器(在資料異動前觸發)

  • 目的:防止不符合試務規則的資料被寫入資料表中,來確保投票人沒有過度投票或是圈選出的候選人超過該項所允許的圈選人數
  • 做法:資料表voter、race、candidate需要設定為只有特定人員才可以對內容進行異動,要防止其他使用者對這三個資料表做修改。
  • BI型觸發器
    • 要防止其他人員對資料表voter、race、candidate插入資料
      • tr_voter_bi
        • 防止其他使用者插入投票人的資料
        • 檢查使用者名稱是否帶有secretary_of_state,若沒有會用signal陳述式傳送錯誤訊息,並以語法set message_text來顯示我們要表達的句子
          https://ithelp.ithome.com.tw/upload/images/20240902/201687597dLrynl0eL.png
      • tr_race_bi
        • 防止其他使用者插入競選職務的資料
        • 寫法如tr_voter_bi
          https://ithelp.ithome.com.tw/upload/images/20240902/2016875905iKFyv5fU.png
      • tr_candidate_bi
        • 防止其他使用者插入候選人的資料
        • 寫法如tr_voter_bi
          https://ithelp.ithome.com.tw/upload/images/20240902/201687595GlLFBYceD.png
      • tr_ballot_cnadidate
        • 防止投票人在同一選票上投給太多人
        • 需要先檢查該競選職務允許選民投給幾個人,在看這張選票和競選職務檢查資料表ballot_cnadidate出現幾列資料,如果超出允許人數就會阻止插入資料表
        • 宣告五個變數v_race_id(保存競選職務ID)、v_votes_allowed(保存可允許投給幾位)、 v_existing_votes(保存選民真實圈選幾個人)、v_race_name(保存競選職務名稱)、v_error_msg(保存要顯示給使用者看的錯誤訊息)
          https://ithelp.ithome.com.tw/upload/images/20240902/20168759gX70ecwATj.png
        • 第一個select...into陳述式,取的該候選人參與哪一項競選職務,將資料表race行合併查詢race_id、v_race_name、r.race_allowed_num的值寫入變數
          https://ithelp.ithome.com.tw/upload/images/20240902/20168759jjulFnUxd7.png
        • 第二個select陳述式,從資料表ballot_cnadidate取的選票來知道選民實際在該張選票投了幾名候選人,將資料表candidate行合併查詢
          https://ithelp.ithome.com.tw/upload/images/20240902/201687596zN4Y9sjfO.png
        • 如果實際投的人數大於允許人數會以命令signal加上sqlstate代碼退出觸發器、防止寫入資料表ballot_cnadidate,並且會顯示錯誤訊息給使用者
          https://ithelp.ithome.com.tw/upload/images/20240902/20168759sCl4ocez56.png
  • BU型觸發器
    • 要防止其他人員對資料表voter、race、candidate更新資料(寫法如tr_voter_bi)
      • tr_voter_bu
        • 防止其他使用者更新投票人的資料
          https://ithelp.ithome.com.tw/upload/images/20240902/20168759KDT45Bz6zg.png
      • tr_race_bu
        • 防止其他使用者更新競選職務的資料
          https://ithelp.ithome.com.tw/upload/images/20240902/20168759YO7NOHFGY1.png
      • tr_candidate_bu
        • 防止其他使用者更新候選人的資料
          https://ithelp.ithome.com.tw/upload/images/20240902/20168759gzZwF1G9Jv.png
  • BD型觸發器
    • 要防止其他人員對資料表voter、race、candidate刪除資料(寫法如tr_voter_bi)
      • tr_voter_bd
        • 防止其他使用者刪除投票人的資料
          https://ithelp.ithome.com.tw/upload/images/20240902/20168759EMT4Izsdlm.png
      • tr_race_bd
        • 防止其他使用者刪除競選職務的資料
          https://ithelp.ithome.com.tw/upload/images/20240902/20168759jgfczMNYQs.png
      • tr_candidate_bd
        • 防止其他使用者刪除候選人的資料
          https://ithelp.ithome.com.tw/upload/images/20240902/20168759jP9uzebKE4.png

下一章:專題二利用觸發器追蹤投票者資料異動(下)


上一篇
Day14 專題二 利用觸發器追蹤投票者資料異動(上)
下一篇
Day16 專題二 利用觸發器追蹤投票者資料異動(下)
系列文
從零開始的MySQL開發旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言