十一、MySQL触发器
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由时间来触发某个操作,这些时间包括INSERT、UODATE和DELETE语句。如果定义了触发程序,当数据库执行这些语句的时候
千家信息网最后更新 2025年01月21日十一、MySQL触发器
MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由时间来触发某个操作,这些时间包括INSERT、UODATE和DELETE语句。如果定义了触发程序,当数据库执行这些语句的时候就会触发执行相应的操作,触发程序是与表有关的命名数据库对象,当表上出现特定事件时,当激活该对象。
11.1、创建触发器
触发器是一个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL语句来调用,也不需要手工启动,只要当预定义的时间发生的时候,就会被MySQL自动调用。
创建一个触发器的语法为:
CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_body
trigger_name:触发器名称,用户自行指定 trigger_time:触发时机,可以指定为before或after trigger_event:标识触发事件 tbl_name:标识触发器的表名 trigger_body:触发器执行语句 |
创建一个单执行语句的触发器:
mysql> CREATE TABLE account (acc_num INT,amount DECIMAL(10,2));Query OK, 0 rows affected (0.06 sec)mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account -> FOR EACH ROW SET @sum = @sum +NEW.amount;Query OK, 0 rows affected (0.02 sec)mysql> SET @sum=0;Query OK, 0 rows affected (0.00 sec)mysql> INSERT INTO account VALUES (1,1.00),(2,2.00);Query OK, 2 rows affected (0.02 sec)Records: 2 Duplicates: 0 Warnings: 0mysql> SELECT @sum;+------+| @sum |+------+| 3.00 |+------+1 row in set (0.00 sec)
创建多个执行语句的触发器的语法:
CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW BEGIN trigger_stmt END
11.2、查看触发器
查看触发器是指查看数据库中已存在的触发器的定义、状态和触发信息等可以通过SHOW TRUGGERS和在triggers表中查看触发器信息。
mysql> CREATE TABLE myevent -> ( -> id int(11) DEFAULT NULL, -> evt_name char(20) DEFAULT NULL -> );Query OK, 0 rows affected (0.03 sec)mysql> CREATE TRIGGER trig_update AFTER UPDATE ON account -> FOR EACH ROW INSERT INTO myevent VALUES (1,'AFTER UPDATE');Query OK, 0 rows affected (0.05 sec)mysql> SHOW TRIGGERS \G*************************** 1. row *************************** Trigger: ins_sum Event: INSERT Table: account Statement: SET @sum = @sum +NEW.amount Timing: BEFORE Created: NULL sql_mode: Definer: root@localhostcharacter_set_client: utf8collation_connection: utf8_general_ci Database Collation: utf8_general_ci*************************** 2. row *************************** Trigger: trig_update Event: UPDATE Table: account Statement: INSERT INTO myevent VALUES (1,'AFTER UPDATE') Timing: AFTER Created: NULL sql_mode: Definer: root@localhostcharacter_set_client: utf8collation_connection: utf8_general_ci Database Collation: utf8_general_ci2 rows in set (0.00 sec)
在MySQL中所有触发器的定义都存在INFORMATION_SCHEMA数据库的TRIGGERS表中,可以通过SELECT 来查看,其语法格式为:
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE condition;
mysql> SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_NAME='trig_update' \G*************************** 1. row *************************** TRIGGER_CATALOG: def TRIGGER_SCHEMA: test TRIGGER_NAME: trig_update EVENT_MANIPULATION: UPDATE EVENT_OBJECT_CATALOG: def EVENT_OBJECT_SCHEMA: test EVENT_OBJECT_TABLE: account ACTION_ORDER: 0 ACTION_CONDITION: NULL ACTION_STATEMENT: INSERT INTO myevent VALUES (1,'AFTER UPDATE') ACTION_ORIENTATION: ROW ACTION_TIMING: AFTERACTION_REFERENCE_OLD_TABLE: NULLACTION_REFERENCE_NEW_TABLE: NULL ACTION_REFERENCE_OLD_ROW: OLD ACTION_REFERENCE_NEW_ROW: NEW CREATED: NULL SQL_MODE: DEFINER: root@localhost CHARACTER_SET_CLIENT: utf8 COLLATION_CONNECTION: utf8_general_ci DATABASE_COLLATION: utf8_general_ci1 row in set (0.00 sec)
11.3、触发器的使用
触发程序是与表有关的命名数据库对象,当表上出现特定时间时,将激活该对象。
创建一个在account表插入数据之后,更新myevent数据表的触发器。
mysql> CREATE TRIGGER trig_inster AFTER INSERT ON account -> FOR EACH ROW INSERT INTO myevent VALUES (2,'AFTER INSERT'); Query OK, 0 rows affected (0.02 sec)mysql> INSERT INTO account VALUES (1,1.00),(2,2.00);Query OK, 2 rows affected (0.01 sec)Records: 2 Duplicates: 0 Warnings: 0mysql> SELECT * FROM myevent;+------+--------------+| id | evt_name |+------+--------------+| 2 | AFTER INSERT || 2 | AFTER INSERT |+------+--------------+2 rows in set (0.00 sec)
11.4、删除触发器
使用DROP TRIGGER语句可以删除MySQL中已经存在的触发器,其语法格式为:
DROP TRIGGER [schema_name.]trigger_name
删除一个触发器
mysql> DROP TRIGGER test.ins_sum;Query OK, 0 rows affected (0.02 sec)
触发器
语句
数据
数据库
对象
时间
程序
语法
过程
存储
事件
信息
可以通过
时候
标识
格式
激活
有关
不同
特殊
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
南信大网络安全警企合作实验室
防病毒技术等网络安全技术
服务器主板上的8针接线
pe系统怎样备份数据库
江苏一站式软件开发设计
数据库字段转换成文字
金牛区奇迹之光软件开发工作室
新华三杯网络安全参赛人数
网络安全法属于哪个法
云服务器做淘宝安全吗
辽宁省超级服务器虚拟主机
redis启动服务器
黄超荣服务器
在软件开发中pte是什么意思
软件开发涉及的会计
备忘录共享显示服务器出现错误
服务器电源短路维修
插图软件开发
世界植物标本馆索引在线数据库
苹果手机免费数据库软件
给软件重新换数据库
微信搜题软件开发
戴尔机架式服务器经销商
web软件开发职业技术证书
创新人才培养共建网络安全
合肥捷科网络技术有...
数据库控件
如何做好安全网络安全保密管理
浙江网络安全通报中心
什么是网络安全的英文