主要参考:
书籍:
MySQL数据库应用从入门到精通(删库) 中国铁道出版社
SQL相关介绍合集:
SQL介绍(一)创建数据库,表的操作(创建,更新,删除):https://blog.csdn.net/qq_41605114/article/details/97292616
SQL介绍(二)完整性约束,数据类型,索引(创建,更新,删除):https://blog.csdn.net/qq_41605114/article/details/97392269
SQL介绍(三)触发器:https://blog.csdn.net/qq_41605114/article/details/97794131
SQL介绍(四)单表查询:https://blog.csdn.net/qq_41605114/article/details/97934605
Qt:MySQL数据库总结(表的创建,插入,各种查询方式,删除,封装时需要的dll):https://blog.csdn.net/qq_41605114/article/details/90671791
Qt封装调用MySQL的软件时所需的依赖项:https://blog.csdn.net/qq_41605114/article/details/86612264
目录
1,触发器介绍
2,创建触发器
2.1创建有一条执行语句的触发器
2.2创建包含多条执行语句的触发器
3,查看触发器
4,删除触发器
触发器(TRIGGER)是MySQL的数据库对象之一,该对象与编程语言中的函数非常类似,都需要声明、执行等。
但是触发器的执行不是由程序调用,也不是手工启动,而是由事件触发,激活从而实现执行的。
使用触发器的需求来源:
需要在表发生更改时,自动进行一些处理,这时即可使用触发器处理数据库对象,例如:对第一个实例,可以创建一个触发器对象,每次添加一条学生记录时,就执行一次计算学生总数的操作,这样即可保证每次添加一条学生记录后,学生总数与学生记录数保持一致,查看帮助文档,可以发现MySQL软件在触发如下语句时,就会自动执行所设置的操作。
其他语句不会激活触发器,在具体应用中,之所以会经常使用触发器数据库对象,是由于该对象能够加强数据库表中数据的完整性约束和业务规则等。
create trigger trigger_name
BEFORE|AFTER trigger_EVENT
ON TABLE_NAME FOR EACH ROW
ROW_triggrt_STMT
trigger_name参数表示所要创建的触发器名字,在具体创建触发器时,触发器标识符不能与已经存在的触发器重复。
除了上述要求外,建议触发器名命名(标识符)为trigger_XXX;
BEFORE和AFTER参数指定了触发器执行的时间;
TBALE_NAME参数表示触发事件操作表的名字;
FOR EACH ROW参数表示任何一条记录上的操作满足触发事件都会触发该触发器;
trigger_STMT参数表示激活触发器后被执行的语句。
执行SQL语句CREATE TRIGGER,在数据库company中存在两个表对象:部门表t_dept和日记表t_diary,创建触发器实现向部门表插入数据时,就会在插入之前,向日记表中插入当前时间:
CREARE TRIGGER tri_diarytime_special
BEFORE INSERT
ON t_dept FOR EACH ROW
INSERT INTO t_diary VALUES(NULL,'t_dept',now());
create trigger trigger_name
BEFORE|AFTER trigger_EVENT
ON TABLE_NAME FOR EACH ROW
BEGIN
ROW_triggrt_STMT
END
trigger_name参数表示所要创建的触发器名字,在具体创建触发器时,触发器标识符不能与已经存在的触发器重复。
除了上述要求外,建议触发器名命名(标识符)为trigger_XXX;
BEFORE和AFTER参数指定了触发器执行的时间;
TBALE_NAME参数表示触发事件操作表的名字;
FOR EACH ROW参数表示任何一条记录上的操作满足触发事件都会触发该触发器;
trigger_STMT参数表示激活触发器后被执行的语句
新加入的两个关键字:
在BEGIN和END之间,可以执行多个执行语句、之间用";"分号隔开。
DELIMITER $$
create trigger tri_diarytime
AFTER INSERT
ON t_dept FOR EACH ROW
BEGIN
INSERT INTO t_diary VALUES(NULL,'t_dept',now() );
INSERT INTO t_diary VALUES(NULL,'t_dept',now() );
END
$$
DELIMITER;
首先通过"DELIMITER $$"语句设置结束符号为"$$",最后通过"DELIMITER;"
语句将结束符号"$$",变成默认结束符号";"。
当创建触发器时,常有“ERROR 1359(HY000):Trigger already existence”;
和其他相关的错误,之所以不能正确创建触发器,因为出去触发器已经存在外
MySQL对于具有相同触发程序动作时间和事件的给定表,不能有两个触发器。
在创建触发器之前。需要查看MySQL软件中是否已经存在该标识符的触发器。
SHOW TRIGGERS \G
DROP TRIGGER trigger_name