距离小红老师的《数据库原理》课程已经有一年了,增删改查大家肯定还记得,但是触发器估计忘得差不多了吧(至少我是还给小红老师了),下面通过一个例子来复习一下触发器trigger的知识。
一、触发器的定义
触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。其定义伪代码如下:
DELIMITER || CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW BEGIN trigger_statement; ...; ...; END || DELIMITER ;
释义:
DELIMITER ||:将结束符号变成||,避免与trigger_statement中的分行符;冲突
trigger_name:触发器名称
tirgger_time:触发时机:BEFORE,即事件之前或者AFTER,即事件之后
trigger_event:触发事件:INSERT、DELETE或者UPDATE
table_name:表示建立触发器的表名,即在哪张表上建立触发器
FOR EACH ROW:表示任何一条记录上的操作满足触发事件都会触发该触发器
trigger_statement:触发器的程序体,可以是一条SQL语句或者多条语句
||:表示触发器创建完成
DELIMITER ;:触发器创建完成后,将结束符号还原回;
二、触发器创建实例
-- 创建数据库 create database book_test; use book_test; -- 创建图书信息表 create table bookinfo( book_id int primary key auto_increment, book_name varchar(20) not null, price float(6,2) not null, public_date date not null, store int not null ); -- 插入图书数据 insert into bookinfo(book_name,price,public_date,store) values('Android移动应用开发',39.8,'2021-12-26',6); insert into bookinfo(book_name,price,public_date,store) values('Java程序设计',56.2,'2011-12-26',15); insert into bookinfo(book_name,price,public_date,store) values('算法与数据结构',20,'2015-02-10',18); select * from bookinfo -- 创建日志数据表 CREATE TABLE `logs` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `log` varchar(255) DEFAULT NULL COMMENT '日志说明', PRIMARY KEY (`Id`) ) -- 创建触发器,作用:当在bookinfo中插入一条数记录时,会在logs中生成一条日志信息 DELIMITER || CREATE TRIGGER user_log AFTER INSERT ON bookinfo FOR EACH ROW BEGIN DECLARE s1 VARCHAR(40) character set utf8; DECLARE s2 VARCHAR(40) character set gbk; SET s1 = ' is created'; #函数CONCAT将字符串连接 NEW.columnname:新增行的某列数据 SET s2 = CONCAT(NEW.book_name,s1); INSERT INTO logs(log) values(s2); END || DELIMITER ; -- 查看创建的触发器 SELECT * FROM information_schema.triggers; -- 测试触发器 select * from logs; insert into bookinfo(book_name,price,public_date,store) values('解忧杂货店',48,'2016-03-03',48); select * from logs;
三、运行结果
1>触发器创建成功:
2>触发器执行成功: