通过实例理解触发器的使用方法

目录

一、触发器简介

如何创建触发器:

二、示例

2.1 需求描述

2.2 需求实现

建立职工库

创建职工表

创建工资表

创建触发器1

创建触发器2

创建触发器3

2.3 导入数据测试

结果如下:


一、触发器简介

触发器是一种比较特殊的存储过程,它的执行不是由程序调用,也不是手工调用,而是通过事件来进行触发。

比如说 对一张表 进行(增,删,改),去激活它的执行。

触发器经常应用在加强数据完整性,和业务规则中,如:当一个学生表中添加了一个学生信息时,那么对应的学生数目肯定会有所改变。像这样的情况,我们就可以针对学生表创建一个触发器:以确保每次增加一个学生记录时,就执行一次关于学生总数的计算操作,从而确保学生总数与记录数的一致性。

如何创建触发器:

#语法要求
CREATE TRIGGER 触发器名称 BEFORE|AFTER 触发事件
    ON 表名 FOR EACH ROW
    BEGIN
        触发器程序体;
    END 
    
#说明
<触发器名称> 参考索引命名||表命名
BEFORE|AFTER   触发器时机
INSERT DELETE UPDATE 触发的事件
ON 表名   在哪张表上建立触发器 
FOR EACH ROW 触发器执行间隔策略 ===> 字句通知触发器,每隔一行执行一次动作,并不是对整个表执行。
触发器程序体  要出发的SQL语句

二、示例

2.1 需求描述

创建职工表以及职工工资表
职工表字段:工号,姓名,性别,年龄
工资表字段:编号自增,职工工号,基础工资10000
通过触发器实现:
对职工进行添加时 工资表中也要体现当前职工的信息
对职工进行修改时 工资表中也要一并修改当前职工的信息
对职工进行解聘时 工资表中也要一并删除当前员工的工资信息

2.2 需求实现

建立职工库

CREATE DATABASE Work_db;

创建职工表

CREATE TABLE worker(
    WorkerID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    WorkerName VARCHAR(20),
    WorkerSex ENUM('0','1'),
    Age INT
)ENGINE=INNODB;

创建工资表

CREATE TABLE wages(
    ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    WorkerID INT NOT NULL,
    Salary DOUBLE(10,2)
)ENGINE=INNODB;

创建触发器1

CREATE TRIGGER worker_insert_trigger 
    AFTER INSERT ON worker
    FOR EACH ROW
    BEGIN
        INSERT INTO wages VALUES(NULL,new.WorkerID,10000);
    END;

创建触发器2

CREATE TRIGGER worker_update_trigger
    AFTER UPDATE ON worker
    FOR EACH ROW
    BEGIN
        UPDATE wages SET WorkerID = new.WorkerID WHERE WorkerID = old.WorkerID;
    END;

创建触发器3

CREATE TRIGGER worker_delete_trigger
    AFTER DELETE ON worker
    FOR EACH ROW
    BEGIN
        DELETE FROM wages WHERE WorkerID = old.WorkerID;
    END;

2.3 导入数据测试

INSERT INTO worker VALUES(1,'王令','0',21);
INSERT INTO worker VALUES(2,'老王','0',22);
INSERT INTO worker VALUES(3,'嘉文','0',23);
INSERT INTO worker VALUES(4,'文静','1',24);
INSERT INTO worker VALUES(5,'小宇','0',25);

UPDATE worker SET WorkerID = '999' WHERE WorkerID = '5';

DELETE FROM worker WHERE WorkerID = '999';
结果如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Smiling Mr. Rui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值