触发程序

触发程序:用户定义在数据表上的一类由事件驱动的特殊过程。

任何用户对表的增删改操作均由服务器自动激活相应的触发程序。
通过触发程序,可以使多个不同的用户能够在保持完整性 和一致性的环境中进行修改操作。

1. 触发程序的定义

触发程序: 是一种特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是通过事件进行触发来被执行的,当对一个表进行操作时就会激活它并执行

2. 触发程序的创建

语法

create trigger <触发程序名称>
{before / after}
{insert / update / delete}
on <表名>
for each row
<触发程序SQL语句>
  • 表导拥有者即创建者可以在表上创建触发程序,一个表上可以创建多个触发程序
  • on <表名> :用于指定响应该触发程序的表名。必须引用永久性表,不能将触发程序与TEMPORARY表或视图关联起来。
  • for each row: 触发程序的执行间隔,通知触发程序每隔一行执行一次动作,而不是对整个表执行一次。
  • <触发程序SQL语句>:触发程序要执行的SQL语句。如果多条语句,放在begin…end块中。
    触发程序名称存放在方案的名称空间内,1个方案中所有触发程序名称唯一,不同方案可以有相同名称

对应具有相同触发程序动作时间和事件的给定表,不能有两个触发程序。

示例1

CREATE TABLE stu(
sno INT PRIMARY KEY,
sname VARCHAR(20)
);
CREATE TABLE num_stu(
num INT
);
--触发程序
CREATE TRIGGER tri_stu
AFTER INSERT
ON stu
FOR EACH ROW
UPDATE num_stu
SET num = num + 1;

INSERT INTO num_stu VALUE(0);
INSERT INTO stu VALUE(1, 'mike');
SELECT * FROM num_stu;

示例2

CREATE TABLE emp(
empno INT,
empname VARCHAR(20),
sal DECIMAL(7, 2)
);

--触发程序
CREATE TRIGGER tri_emp
BEFORE INSERT
ON emp
FOR EACH ROW
BEGIN
IF new.sal<5000 THEN
SET new.sal=5000;
END IF;
END

INSERT INTO emp VALUES(1, 'mike', 2300);
SELECT * FROM emp;

3. 触发程序的操作

3.1 查看触发程序

方式1
语法

SHOW TRIGGERS [from db_name] [like expr]

{expr} 会与触发程序定义时所在表的名称相比较,而不与触发程序的名称相比较

示例

show triggers like 'emp';

方式2

已经定义好的触发程序信息都存储在information_schema库中的triggers表中

语法

SELECT * FROM information_schema.`TRIGGERS` WHERE CONDITION
  • trigger:触发程序的名称
  • event:调用触发程序的时间。必须为insert / update / delete 之一。
  • table: 触发程序定义时对应的表
  • statement: 执行语句
  • timing: before 或 after 两个值之一
  • created: 目前,本列的值为null.

示例

SELECT * FROM information_schema.`TRIGGERS` WHERE trigger_name='tri_emp';
  • trigger_schema: 触发程序所在数据库的名称
  • trigger_name: 触发程序的名字
  • event_manipulation: 触发动作
  • event_object_schema: 相应的数据库
  • event_object_table: 相应的触发程序相关的表名

3.2 删除触发程序

语法

drop {database / schema} {if exists} trigger_name
  • schema: 表示数据库的名称,schema_name是可选的,如果省略不写,将从当前数据库中删除触发程序。

语法

drop trigger if exists tri_emp;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值