【MySQL】触发器

USE stumanbd;

/*向t_studentb表中插入一条记录,测试insert触发器“st_insert”是否会被触发。*/
DELIMITER $$
CREATE
TRIGGER st_insert AFTER/*BEFORE*/ INSERT/*UPDATE DELETE*/
ON t_students FOR EACH ROW
BEGIN
SET @student="插入记录成功";
END $$
DELIMITER ;
/*BEFORE或AFTER,用以指明触发器在激活它的语句之前或之后触发。*/
/*INSERT UPDATE DELETE 激活触发器程序的语句类型。*/
/*FOR EACH ROW:表示任何一条记录上的操作满足触发器事件都会触发该触发器。*/
/*触发器与表操作存在一定的执行顺序,
before触发器首先被激活,
然后执行行操作,最后AFTER触发器再被激活。
*/
SHOW TRIGGERS;/*查看库中的触发器*/

SELECT @student;/*此时变量的值为NULL*/

/*插入一条数据*/
INSERT INTO t_students(StuNo,StuName,StuGender,StuBirth,ClassNo,di_id) VALUES('35092005060','刘梅','女','2001-9-2','003','3005');

SELECT @student;/*此时变量的值为插入记录成功*/

DROP TRIGGER st_insert;/*删除触发器*/

/*创建delete触发器,触发器名称为st_delete,当学生表中删除了一个学生的信息时,
学生的成绩表就必须同时把该学生的信息删除。
保证每次删除学生的记录后,学生成绩表的记录数是统一的*/

DELIMITER $$
CREATE
TRIGGER st_delete1 AFTER DELETE 
ON  t_students FOR EACH ROW
BEGIN
DELETE FROM t_score WHERE StuNo=OLD.StuNo;
END $$
DELIMITER ;/*OLD将被删除的那条记录*/

/*删除t_students表中学号为“35092001007”的学生记录*/
/*执行成功后,查看t_score表中对应数据可以看到已经删除学号为“35092001007”的记录,
说明触发了“st_delete”触发器,执行了删除操作。*/
DELETE FROM t_students WHERE StuNo='35092001007';

SELECT * FROM t_score;

DELIMITER $$
CREATE TRIGGER tea_delete BEFORE DELETE
ON t_teachers FOR EACH ROW  
BEGIN
/*这里我们抛出一个错误,阻止删除操作*/
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '记录不允许删除';  
END $$
DELIMITER ;

DELETE FROM t_teachers WHERE TeaNo='2019482719';/*被触发器阻止的删除操作*/、

/*可以执行SHOW TRIGGERS语句来查看触发器的基本信息*/
SHOW TRIGGERS;

/*其中,information_schema是MySQL中默认存在的库,
而triggers是数据库中用于记录触发器信息的数据表,
如果用户想要查看某个触发器的信息,可以使用where子句定义查询的条件。*/
SELECT * FROM information_schema.triggers;

/*删除触发器*/
DROP TRIGGER tea_delete;

建表语句见:【MySQL数据库编程 存储过程&触发器 示例】-CSDN博客 附录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值