在本教學中,您將了解MySQL觸發器實現。另外,我們將向展示MySQL如何將觸發器和觸發器的限制儲存在MySQL中。
在MySQL中,觸發器是一組SQL語句,當對相關聯的表上的資料進行更改時,會自動呼叫該語句。 觸發器可以被定義為在INSERT,UPDATE或DELETE語句更改資料之前或之後呼叫。在MySQL5.7.2版本之前,每個表最多可以定義六個觸發器。
BEFORE INSERT
- 在資料插入表之前被啟用觸發器。AFTER INSERT
- 在將資料插入表之後啟用觸發器。BEFORE UPDATE
- 在表中的資料更新之前啟用觸發器。AFTER UPDATE
- 在表中的資料更新之後啟用觸發器。BEFORE DELETE
- 在從表中刪除資料之前啟用觸發器。AFTER DELETE
- 從表中刪除資料之後啟用觸發器。但是,從MySQL 5.7.2+版本開始,可以為相同的觸發事件和動作時間定義多個觸發器。
當使用不使用INSERT
,DELETE
或UPDATE
語句更改表中資料的語句時,不會呼叫與表關聯的觸發器。 例如,TRUNCATE語句刪除表的所有資料,但不呼叫與該表相關聯的觸發器。
有些語句使用了後台的INSERT
語句,如REPLACE語句或LOAD DATA語句。如果使用這些語句,則呼叫與表關聯的相應觸發器。
必須要為與表相關聯的每個觸發器使用唯一的名稱。可以為不同的表定義相同的觸發器名稱,這是一個很好的做法。
應該使用以下命名約定命名觸發器:
(BEFORE | AFTER)_tableName_(INSERT| UPDATE | DELETE)
例如,before_order_update
是更新orders
表中的行資料之前呼叫的觸發器。
以下命名約定與上述一樣。
tablename_(BEFORE | AFTER)_(INSERT| UPDATE | DELETE)
例如,order_before_update
與上述before_order_update
觸發器相同。
MySQL在資料目錄中儲存觸發器,例如:/data/yiibaidb/
,並使用名為tablename.TRG
和triggername.TRN
的檔案:
tablename.TRG
檔案將觸發器對映到相應的表。triggername.TRN
檔案包含觸發器定義。可以通過將觸發器檔案複製到備份檔案夾來備份MySQL觸發器。也可以使用mysqldump工具備份觸發器。
MySQL觸發器覆蓋標準SQL中定義的所有功能。 但是,在應用程式中使用它們之前,您應該知道一些限制。
MySQL觸發器不能:
SHOW
,LOAD DATA
,LOAD TABLE
,BACKUP DATABASE,RESTORE
,FLUSH
和RETURN
語句之上。COMMIT
,ROLLBACK
,START TRANSACTION
,LOCK/UNLOCK TABLES,ALTER
,CREATE
,DROP
,RENAME等。PREPARE
,EXECUTE
等從MySQL 5.1.4版本開始,觸發器可以呼叫儲存過程或儲存函式,在這之前的版本是有所限制的。
在本教學中,我們向您展示了如何在MySQL中實現觸發器。我們還討論了觸發器的儲存以及觸發器在MySQL中的局限性。