我們必須要了解使用MySQL觸發(fā)器的優(yōu)勢、劣勢和限制,以便能夠有效地使用它。
優(yōu)勢
以下是使用MySQL觸發(fā)器的優(yōu)勢:
- 數(shù)據(jù)完整性?–借助MySQL觸發(fā)器,我們可以檢查表中數(shù)據(jù)的完整性。換句話說,MySQL觸發(fā)器是檢查數(shù)據(jù)完整性的替代方式。捕捉錯誤?–MySQL觸發(fā)器可以捕捉數(shù)據(jù)庫層中的業(yè)務(wù)邏輯錯誤。替代方式運行定時任務(wù)?–實際上,通過使用MySQL觸發(fā)器,我們不必等待運行定時任務(wù),因為觸發(fā)器會在對表中的數(shù)據(jù)進行修改之前或之后自動觸發(fā)。審計?–實際上,MySQL觸發(fā)器非常有用于對表中所做更改的審計。防止無效事務(wù)?–MySQL觸發(fā)器在防止無效事務(wù)方面非常有用。事件日志記錄?–MySQL觸發(fā)器可以記錄事件,并且還可以存儲有關(guān)對表的訪問的信息。
劣勢
以下是使用MySQL觸發(fā)器的劣勢:
- 無法替代所有驗證?–實際上,MySQL觸發(fā)器無法替代所有驗證,只能提供擴展驗證。對客戶端應(yīng)用程序不可見?–基本上,MySQL觸發(fā)器在客戶端應(yīng)用程序中被調(diào)用和執(zhí)行時是不可見的,因此很難弄清楚在數(shù)據(jù)庫層發(fā)生了什么。對服務(wù)器施加負載?–觸發(fā)器可能對數(shù)據(jù)庫服務(wù)器施加很大的負載。不適用于高速數(shù)據(jù)?–觸發(fā)器不適用于高速數(shù)據(jù),即每秒事件數(shù)量較高的數(shù)據(jù)。這是因為在高速數(shù)據(jù)的情況下,觸發(fā)器會一直被觸發(fā)。
限制
以下是適用于MySQL觸發(fā)器的一些限制:
- 每個時機/事件只能有一個觸發(fā)器?–每個表每個時機/事件組合只能有一個觸發(fā)器(即我們不能為同一張表定義兩個BEFORE INSERT觸發(fā)器)。不允許使用RETURN語句?–由于觸發(fā)器不返回任何值,因此不允許使用RETURN語句。外鍵限制?–觸發(fā)器不會被外鍵操作激活。過時的元數(shù)據(jù)?–假設(shè)一個觸發(fā)器被加載到緩存中,當表的元數(shù)據(jù)發(fā)生更改時,它不會自動重新加載。在這種情況下,觸發(fā)器可能使用過時的元數(shù)據(jù)進行操作。不能使用CALL語句?–我們不能在觸發(fā)器中使用CALL語句。不能創(chuàng)建臨時表或視圖?–我們不能為臨時表或視圖創(chuàng)建視圖。不會被INFORMATION_SCHEMA中的更改激活?–實際上,觸發(fā)器不會被INFORMATION_SCHEMA或performance_schema表中的更改激活。這是因為這些表是視圖,而視圖上不允許使用觸發(fā)器。
以上就是使用MySQL觸發(fā)器有哪些優(yōu)點、缺點和限制?的詳細內(nèi)容,更多請關(guān)注www.92cms.cn其它相關(guān)文章!