mysql 触发器 注意事项_MySQL触发器的利弊-使用MySQL触发器时应该注意的事项
在MySQL中,觸發(fā)器可以在你執(zhí)行INSERT、UPDATE或DELETE的時候,執(zhí)行一些特定的操作。在創(chuàng)建觸發(fā)器時,可以指定是在執(zhí)行SQL語句之前或是之后執(zhí)行這些操作。通過觸發(fā)器,你可以實現(xiàn)一些業(yè)務邏輯或一些數(shù)據(jù)限制,在簡化應用程序邏輯,優(yōu)化系統(tǒng)性能時非常有用。但在使用MySQL觸發(fā)器也有一些注意事項,否則會導致觸發(fā)器不能工作或不按指定的方式工作。
1. MySQL觸發(fā)器注意事項
MySQL觸發(fā)器使用非常簡單,當然其功能也比較有限。當你在項目中大量使用觸發(fā)器,那么你應該注意以下幾點,以避免觸發(fā)器不按預期效果執(zhí)行:
MySQL觸發(fā)器能基于行觸發(fā),MySQL觸發(fā)器始終時基于表中的一條記錄觸發(fā),而不是一組SQL語句。因此,如果需要變動整個數(shù)據(jù)集而數(shù)據(jù)集數(shù)據(jù)量又較大時,觸發(fā)器效果會非常低。
每一個表的一個事件只能定義一個觸發(fā)器,例如:不能在AFTER INSERT上定義一個以上的觸發(fā)器。
2. MySQL觸發(fā)器可能導致的問題
由于MySQL觸發(fā)器基于行觸發(fā)的特性,因此對于批量操作并不適合使用觸發(fā)器,如:匯總表、緩存表等。觸發(fā)器使用不當,可能會導致以下問題:
一個MySQL觸發(fā)器可能會關聯(lián)到另外一張表或幾張表的操作。因此,會導致數(shù)據(jù)庫服務器負荷也會相應的增加一倍或幾倍,如果出現(xiàn)因為觸發(fā)器問題導致的性能問題,會很難定位問題位置和原因。
在基于鎖的操作中,觸發(fā)器可能會導致鎖等待或死鎖。觸發(fā)器執(zhí)行失敗,原來執(zhí)行的SQL語名也會執(zhí)行失敗。而因為觸發(fā)器導致的失敗結(jié)果和失敗原因,往往很難排查。
由于MySQL觸發(fā)器的種種問題,要求我們在創(chuàng)建觸發(fā)器就應該充分考慮。避免使用不合適的觸發(fā)器,并能對所有觸發(fā)器有足夠的了解,以便問題的定位和排查。
3. MySQL觸發(fā)器的好處
對MySQL觸發(fā)器有足夠的認識和了解后,MySQL觸發(fā)器會給我們帶來極大的便利。當實現(xiàn)一些系統(tǒng)約束時,或在實現(xiàn)系統(tǒng)維護及針對操作數(shù)據(jù)的更新時,使用觸發(fā)器都非常方便。在之膠我們介紹了MySQL觸發(fā)器不適合做的一些工作,但MySQL觸發(fā)器在以下一些應用場景中,會非常實用:
基于行數(shù)據(jù)變更的日志記錄。如:在用戶訂單系統(tǒng)中,我們可以基于用戶訂單數(shù)據(jù)狀態(tài)的改變,使用觸發(fā)器構(gòu)建用戶訂單日志表數(shù)據(jù)。
基于行數(shù)據(jù)變更的關系數(shù)據(jù)的更新。如:用戶訂單改變至付款或相關狀態(tài)時,我們可以基于用戶訂單數(shù)據(jù)狀態(tài)的改變,使用觸發(fā)器改變用戶會付款或相應狀態(tài)信息。
基于行數(shù)據(jù)變更的數(shù)據(jù)匯總。如:用戶訂單成交或失敗,我們可以基于用戶訂單數(shù)據(jù)狀態(tài)的改變,使用觸發(fā)器構(gòu)建用戶總成交量或失敗量匯總數(shù)據(jù)。
以上僅列舉了一些常用場景,合理的利用MySQL觸發(fā)器會在數(shù)據(jù)庫工作效率和開發(fā)效率上有很大的提高。關于觸發(fā)器的使用方法,請參考:MySql觸發(fā)器trigger的使用
總結(jié)
以上是生活随笔為你收集整理的mysql 触发器 注意事项_MySQL触发器的利弊-使用MySQL触发器时应该注意的事项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 带琳的网名108个
- 下一篇: 成熟又怀旧的网名70个