数据库知识复习:Mysql触发器

        距离小红老师的《数据库原理》课程已经有一年了,增删改查大家肯定还记得,但是触发器估计忘得差不多了吧(至少我是还给小红老师了),下面通过一个例子来复习一下触发器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>触发器执行成功:

扫描二维码关注公众号,回复: 13740227 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_43554335/article/details/123258104