mysql觸發器之觸發器的增刪改查
我們在建立觸發器後,可以在包含觸發器定義檔案的資料資料夾中顯示其定義。觸發器作為純文字檔案儲存在以下資料庫資料夾中:
/data_folder/database_name/table_name.trg
我們還可通過查詢information_schema
資料庫中的triggers
表來顯示觸發器,如下所示:
SELECT
*
FROM
information_schema.triggers
WHERE
trigger_schema = 'database_name'
AND trigger_name = 'trigger_name';
該語句允許您檢視觸發器的內容及其元資料,例如:關聯表名和定義器,這是建立觸發器的mysql使用者的名稱。
如果要檢索指定資料庫中的所有觸發器,則需要使用以下SELECT語句從information_schema
資料庫中的triggers
表查詢資料:
SELECT
*
FROM
information_schema.triggers
WHERE
trigger_schema = 'database_name';
要查詢與特定表相關聯的所有觸發器:
SELECT
*
FROM
information_schema.triggers
WHERE
trigger_schema = 'database_name'
AND event_object_table = 'table_name';
我們來看下employees
表相關聯的所有觸發器:
SELECT * FROM information_schema.triggers
WHERE trigger_schema = '你的資料庫名稱'
AND event_object_table = 'employees';
其實在特定資料庫中顯示觸發器的另一種方法是使用SHOW TRIGGERS
語句,語法如下所示:
SHOW TRIGGERS [FROM|IN] database_name
[LIKE expr | WHERE expr];
例如,如果要檢視當前資料庫中的所有觸發器,可以使用SHOW TRIGGERS
SHOW TRIGGERS;
要獲取特定資料庫中的所有觸發器,請在SHOW TRIGGERS
語句中指定資料庫名稱,比如要查詢資料庫:luyaran下的所有觸發器,如下所示:
SHOW TRIGGERS FROM luyaran;
要獲取與特定表相關聯的所有觸發器,可以使用SHOW TRIGGERS
語句中的WHERE
子句。 以下語句返回與employees
表相關聯的所有觸發器:
SHOW TRIGGERS FROM luyaran
WHERE `table` = 'employees';
這裡要注意下,當我們使用反引號包裝table
列,因為table
是MySQL中的保留關鍵字。然後,當執行SHOW TRIGGERS
語句時,MySQL返回以下列:
Trigger
:儲存觸發器的名稱,例如before_employee_update
觸發器。Event
:指定事件,例如,呼叫觸發器的INSERT
,UPDATE
或DELETE
。Table
:指定觸發器與例如相關聯的表,如employees
表。Statement
:儲存呼叫觸發器時要執行的語句或複合語句。Timing
:接受兩個值:BEFORE
和AFTER
,它指定觸發器的啟用時間。Created
:在建立觸發器時記錄建立的時間。sql_mode
:指定觸發器執行時的SQL模式。Definer
:記錄建立觸發器的帳戶。
在這裡我們得注意下,要允許上述語句,我們至少得擁有SUPER
許可權。
完事我們來嘗試使用DROP TRIGGER
語句來刪除現有的觸發器:
DROP TRIGGER table_name.trigger_name;
如果要刪除與employees
表相關聯的before_employees_update
觸發器,則可以執行以下語句:
DROP TRIGGER employees.before_employees_update;
我們如果要修改觸發器,必須首先刪除它並使用新的程式碼重新建立。因為在MySQL中沒有類似:ALTER TRIGGER
語句,因此,我們不能像修改其他資料庫物件,如表,檢視和儲存過程那樣修改觸發器。
好啦,本次記錄就到這裡了。
如果感覺不錯的話,請多多點贊支援哦。。。