国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL筆記之觸發器的應用

2024-07-24 13:00:50
字體:
來源:轉載
供稿:網友

創建觸發器

創建只有一個執行語句的觸發器

復制代碼 代碼如下:


CREATE TRIGGER 觸發器名 BEFORE|AFTER 觸發事件
ON 表名 FOR EACH ROW 執行語句


其中,觸發器名參數指要創建的觸發器的名字

BEFORE和AFTER參數指定了觸發執行的時間,在事件之前或是之后

FOR EACH ROW表示任何一條記錄上的操作滿足觸發事件都會觸發該觸發器

復制代碼 代碼如下:


mysql> CREATE TRIGGER trig1 AFTER INSERT
-> ON work FOR EACH ROW
-> INSERT INTO time VALUES(NOW());
Query OK, 0 rows affected (0.09 sec)


上面創建了一個名為trig1的觸發器,一旦在work中有插入動作,就會自動往time表里插入當前時間


創建有多個執行語句的觸發器

復制代碼 代碼如下:


CREATE TRIGGER 觸發器名 BEFORE|AFTER 觸發事件
ON 表名 FOR EACH ROW
BEGIN
執行語句列表
END


其中,BEGIN與END之間的執行語句列表參數表示需要執行的多個語句,不同語句用分號隔開

tips:一般情況下,mysql默認是以 ; 作為結束執行語句,與觸發器中需要的分行起沖突

   為解決此問題可用DELIMITER,如:DELIMITER ||,可以將結束符號變成||

   當觸發器創建完成后,可以用DELIMITER ;來將結束符號變成;

復制代碼 代碼如下:


mysql> DELIMITER ||
mysql> CREATE TRIGGER trig2 BEFORE DELETE
-> ON work FOR EACH ROW
-> BEGIN
-> INSERT INTO time VALUES(NOW());
-> INSERT INTO time VALUES(NOW());
-> END
-> ||
Query OK, 0 rows affected (0.06 sec)

mysql> DELIMITER ;


上面的語句中,開頭將結束符號定義為||,中間定義一個觸發器,一旦有滿足條件的刪除操作

就會執行BEGIN和END中的語句,接著使用||結束

最后使用DELIMITER ; 將結束符號還原


查看觸發器
SHOW TRIGGERS語句查看觸發器信息

復制代碼 代碼如下:


mysql> SHOW TRIGGERS/G;
*************************** 1. row ***************************
Trigger: trig1
Event: INSERT
Table: work
Statement: INSERT INTO time VALUES(NOW())
Timing: AFTER
Created: NULL
sql_mode:
Definer: root@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci


結果會顯示所有觸發器的基本信息

tips:SHOW TRIGGERS語句無法查詢指定的觸發器


在triggers表中查看觸發器信息

復制代碼 代碼如下:


mysql> SELECT * FROM information_schema.triggers/G
*************************** 1. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: person
TRIGGER_NAME: trig1
EVENT_MANIPULATION: INSERT
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: person
EVENT_OBJECT_TABLE: work
ACTION_ORDER: 0
ACTION_CONDITION: NULL
ACTION_STATEMENT: INSERT INTO time VALUES(NOW())


結果顯示了所有觸發器的詳細信息,同時,該方法可以查詢制定觸發器的詳細信息

復制代碼 代碼如下:


mysql> SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='trig1'/G
*************************** 1. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: person
TRIGGER_NAME: trig1
EVENT_MANIPULATION: INSERT
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: person
EVENT_OBJECT_TABLE: work


tips:所有觸發器信息都存儲在information_schema數據庫下的triggers表中

   可以使用SELECT語句查詢,如果觸發器信息過多,最好通過TRIGGER_NAME字段指定查詢


刪除觸發器

復制代碼 代碼如下:


mysql> DROP TRIGGER trig1;
Query OK, 0 rows affected (0.04 sec)


刪除觸發器之后最好使用上面的方法查看一遍

同時,也可以使用database.trig來指定某個數據庫中的觸發器

tips:如果不需要某個觸發器時一定要將這個觸發器刪除,以免造成意外操作

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 元朗区| 古蔺县| 兴化市| 同仁县| 萍乡市| 崇明县| 乌拉特前旗| 乐业县| 柏乡县| 莱州市| 柳江县| 繁峙县| 绍兴县| 霍州市| 疏勒县| 玉门市| 精河县| 克拉玛依市| 德阳市| 嘉义县| 东辽县| 连南| 宁海县| 田东县| 昭通市| 新巴尔虎右旗| 藁城市| 如皋市| 山东| 永登县| 凌源市| 晋宁县| 谢通门县| 同心县| 襄垣县| 屏东市| 澎湖县| 博野县| 都兰县| 杭锦后旗| 民权县|