0
点赞
收藏
分享

微信扫一扫

SimpleService 一个简单的Windows Service定时服务

月半小夜曲_ 2024-06-30 阅读 35

一、简介

MySQL触发器和存储过程类似,都是可以在MySQL执行的一段程序。触发器是由事件来触发的,这些事件包括INSERT、UPDATE、DELETE语句。如果定义了触发器,当数据库执行这些语句的时候,就会执行触发器的程序。

触发器(trigger)是一个特殊的存储过程,不同的是,存储过程需要使用CALL语句来调用,而触发器的执行不需要使用CALL语句来调用,也不需要手工启动。而是通过定义SQL语句调用的事件来触发。触发器可以查询其他表,也可以执行复杂的SQL语句。

二、创建触发器

1.创建只有一个执行语句的触发器

  • trigger_name:触发器名称
  • trigger_time:触发时机,可以指定为before或after
  • trigger_event:触发事件,包括INSERT、UPDATE、DELETE
  • tbl_name:建立触发器的表名,即在哪张表上建立触发器
  • trigger_stmt:触发器执行的语句

例:在fruits表创建一个触发器,计算器插入数据前,总的行数

可以看出在插入第四行之前,数据库中有3条记录,所以@sum返回3是正确的

2.创建有多个执行语句的触发器

  • trigger_name:触发器名称
  • trigger_time:触发时机,可以指定为before或after
  • trigger_event:触发事件,包括INSERT、UPDATE、DELETE
  • tbl_name:建立触发器的表名,即在哪张表上建立触发器
  • trigger_stmt:触发器执行的语句列表,可以是多个

例:创建一个触发器,在插入一条数据时,同时给其他多个表插入数据

CREATE TABLE test1 (a1 INT);
CREATE TABLE test2 (a2 INT);
CREATE TABLE test3 (a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4 (a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b4 INT DEFAULT 0);
CREATE TRIGGER testMultiAdd BEFORE INSERT ON test1 FOR EACH ROW
BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1;
    UPDATE test4 SET b4 = b4 +1 WHERE a4 = NEW.a1;
END;//

从结果看,向表test1插入数据时,test2、test3、test4都发生了变化,证明触发器执行了。

三、查看触发器

1.使用SHOW TRIGGERS查看触发器状态信息

查看所有的触发器

注:这里\G意思是将输出结果从横向转换为纵向的

2.在triggers表中查看触发信息

例如,查看名称为testMultiAdd的触发器

四、删除触发器

  • DROP TRIGGER:删除触发器关键字
  • schema_name:表示数据库名称,可选,如果省略了表示行当前数据库删除
  • trigger_name:触发器名

=========================================================================
创作不易,请勿直接盗用,使用请标明转载出处。

喜欢的话,一键三连,您的支持是我一直坚持高质量创作的原动力。

举报

相关推荐

0 条评论