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博客 附录