【Trigger】MySQL之触发器

打印 上一主题 下一主题

主题 850|帖子 850|积分 2550

1、MySQL触发器

1.1、什么是触发器



  • MySQL触发器(Trigger)是一种特殊的存储过程,
  • 它与表有关,当表上的特定变乱(insert,update,delete)发生时,触发器会自动执行。
  • 可以利用触发器来实现数据约束,数据验证,数据复制等功能
1.2、为什么利用触发器



  • 可以实现数据约束,数据验证,数据复制等功能

    • 比方:

      • 可以创建一个触发器,在向表中插入一条记录时,自动向另一个表中插入一个记录,从而实现数据复制的功能。


  • 触发器还可以用于实现数据验证,

    • 比方

      • 在插入或更新数据时,查抄记录的某些字段是否符合要求,则拒绝插入或者更新,如许可以包管数据的完整性和同等性。


1.3、创建触发器

语法:
  1. create trigger 触发器名称
  2. {before | after } {insert | update | delete}  -- 触发器类型和事件
  3. on 表名称
  4. for each row  -- 触发器的作用范围
  5. begin
  6.     -- 触发器执行的操作
  7. end;
复制代码
  

  • 触发器名称可以自界说 ,并唯一性,见名知意
  • before / after : 表现触发器的类型,分别表现发生前/发生后执行
  • insert / update / delete : 表现触发器的变乱类型,分别表现插入 / 更新 / 删除操作
  • on 表名称 : 为触发器所在的表名
  • for each row : 表现触发器作用的范围,即每一行记录都会触发该触发器
  • begin 和 end之间是触发器执行的操作,可以是一条或者多条SQL语句
  

  • 触发器是自动执行的,无需手动调用,
  • 当表上的特定变乱(insert , update, delete ) 发生时,触发器会自动执行
  • 在创建触发器时,可以界说触发器的类型和变乱,从而控制触发器的时机和条件
案例:
  1. -- 创建两张表
  2. create table table1(
  3.     id int,
  4.     name varchar(20) character set utf8
  5. )charset = utf8;
  6. create table table2(
  7.     id int,
  8.     name varchar(20) character set utf8
  9. )charset = utf8;
复制代码
1.3.1、添加变乱

  1. -- 创建一个触发器,当向表中插入一条记录时,自动向另一个表中插入一条记录
  2. create trigger insert_trigger_1
  3. after insert on table1
  4.     for each row
  5.     begin
  6.         -- 触发器的具体事件
  7.         insert into table2(id,name) values (NEW.id,New.name);
  8.     end;
复制代码
添加数据:
   向table1表中添加数据时,会触发insert_trigger_1触发器,自动向table2表中添加数据
  1. insert into table1(id,name) values (1,'kobe'),(2,'lebron'),(3,'curry'),(4,'durant'),(5,'paul'),(6,'westbrook');
复制代码
查询table1表
  1. select * from table1;
复制代码

查询table2表
  1. select * from table2;
复制代码

1.3.2、删除变乱

  1. -- 创建一个触发器,当从表中删除一条记录时,自动从另一个表中删除一条记录
  2. create trigger delete_trigger_1
  3. after delete on table1
  4.     for each row
  5.     begin
  6.         delete from table2 where id = OLD.id and name = OLD.name;
  7.     end;
复制代码
删除数据:
   删除table1表中数据时,会触发delete_trigger_1触发器,自动删除table2表中对应的数据
  1. delete from table1 where id = 5 and name = 'paul';
复制代码
查看两张表中的数据
  1. select * from table1;
复制代码

  1. select * from table2;
复制代码

1.3.3、修改变乱

  1. -- 创建一个触发器,当向表中更新一条记录时,自动更新另一个表中的记录
  2. create trigger update_trigger_1
  3. after update on table1
  4.     for each row
  5.     begin
  6.         update table2 set id = NEW.id, name = NEW.name  where id = OLD.id and name = OLD.name;
  7.     end;
复制代码
修改数据:
   修改table1表中数据时,会触发update_trigger_1触发器,自动更新table2表中对应的数据
  1. update table1 set id = 10,name = 'paul' where id = 6 and name = 'westbrook';
复制代码
  1. select * from table1;
复制代码

  1. select * from table2;
复制代码
1.4、删除触发器

  1. drop trigger 触发器名称;
复制代码
1.5、触发器的应用场景

触发器的应用场景包括但不限于以下几种:

  • 强制实验业务规则:通过在触发器中编写逻辑,可以在特定的表上自动执行业务规则,比方查抄输入的数据是否符合要求,或者限定某些操作的执行。
  • 记录日志变动:通过在触发器中编写逻辑,可以在特定的表上自动记录数据的变动环境,比方记录数据的修改时间、修改人等信息。
  • 复杂的默认值盘算:通过在触发器中编写逻辑,可以在特定的表上自动盘算默认值,比方根据其他字段的值盘算出一个新的字段的值。
  • 数据同步:通过在触发器中编写逻辑,可以在多个表之间自动同步数据,比方在一个表中插入一条数据时,自动在另一个表中插入相应的数据。
  • 数据校验:通过在触发器中编写逻辑,可以在特定的表上自动校验数据的正确性,比方查抄数据的唯一性、完整性等。
1.6、

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表