1. 程式人生 > >mysql觸發器之觸發器的增刪改查

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:指定事件,例如,呼叫觸發器的INSERTUPDATEDELETE
  • Table:指定觸發器與例如相關聯的表,如employees表。
  • Statement:儲存呼叫觸發器時要執行的語句或複合語句。
  • Timing:接受兩個值:BEFOREAFTER,它指定觸發器的啟用時間。
  • 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語句,因此,我們不能像修改其他資料庫物件,如表,檢視和儲存過程那樣修改觸發器。

好啦,本次記錄就到這裡了。

如果感覺不錯的話,請多多點贊支援哦。。。