目录
一、触发器简介
触发器是一种比较特殊的存储过程,它的执行不是由程序调用,也不是手工调用,而是通过事件来进行触发。
比如说 对一张表 进行(增,删,改),去激活它的执行。
触发器经常应用在加强数据完整性,和业务规则中,如:当一个学生表中添加了一个学生信息时,那么对应的学生数目肯定会有所改变。像这样的情况,我们就可以针对学生表创建一个触发器:以确保每次增加一个学生记录时,就执行一次关于学生总数的计算操作,从而确保学生总数与记录数的一致性。
如何创建触发器:
#语法要求
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';