精华内容
下载资源
问答
  • 主要介绍了mysql触发器简介、创建触发器使用限制,结合实例形式分析了mysql触发器的功能、原理、创建、用法及操作注意事项,需要的朋友可以参考下
  • 创建触发器 在MySQL中创建触发器通过SQL语句CREATE TRIGGER来实现,其语法形式如下: CREATE trigger trigger_name BEFORE|AFTER trigger_EVENT ON TABLE_NAME FOR EACH ROW trigger_STMT 在上述语句中,参数trigger...

    创建触发器

    在MySQL中创建触发器通过SQL语句CREATE TRIGGER来实现,其语法形式如下:

    CREATE trigger trigger_name BEFORE|AFTER trigger_EVENT
    ON TABLE_NAME FOR EACH ROW trigger_STMT

    在上述语句中,参数trigger_name表示要创建的触发器名;

    参数BEFORE和AFTER指定了触发器执行的时间,前者在触发器事件之前执行触发器语 句,后者在触发器事件之后执行触发器语句;

    参数trigger_EVENT表示触发事件,即触发器执行条件,包含DELETE、INSERT和UPDATE语句;参数TABLE_NAME表示触发事件的操作表名;参数FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器;

    参数trigger_STMT表示激活触发器后被执行的语句。执行语句中如果要引用更新记录 中的字段,对于INSERT语句,只有NEW是合法的,表示当前已插入的记录;对于 DELETE语句,只有OLD才合法,表示当前删除的记录;而UPDATE语句可以和 NEW(更新后)以及OLD(更新前)同时使用。

    注意:不能创建具有相同名字的触发器。另外,对于具有相同触发程序动作时间和事件的给定表,不能有两个触发器。因此,对于有经验的用户,在创建触发器之前,需要查看MySQL中是否已经存在该标识符的触发器和触发器的相关事件。

    【示例10-1】执行SQL语句CREATE TRIGGER,在数据库school中存在两个表对象:学员表student和班级表 class,创建触发器实现向学员表中插入记录时,就会在插入之后更新班级表中的人数,当我们删除某条学员的记录时,就会在删除后更新班级表中的人数,具体步骤如下:

    mysql>  use school;   #选择数据库school                                           
    mysql>  CREATE TABLE class (                                                        
      `id` int NOT NULL AUTO_INCREMENT,                                              
      `name` varchar(128) DEFAULT NULL,                                               
      `teacher` varchar(64) DEFAULT NULL,  
      `count`  int DEFAULT 0,                                           
      UNIQUE KEY `id` (`id`)                                                              
    );  #创建班级表 class                                                                 
    mysql> insert into class values(101, '萌新一班', 'Martin', 0),(102, '萌新二班', 'Rock', 0),(103, '萌新三班', 'Janny', 0);  #创建成绩表 grade                                                 
    mysql>  CREATE TABLE `student` (                                                  
      `id` int NOT NULL AUTO_INCREMENT UNIQUE,                                                            
      `name` varchar(64) DEFAULT NULL,                                                
      `class_id` int DEFAULT NULL,                                                      
      `sex` enum('F','M') DEFAULT NULL                                                  
    ); 
    mysql> create trigger tri_insert_student after insert on student for each row update class set count=count+1 where class.id = NEW.class_id;   #创建触发器,新增学员班级人数增1
                                                                                   
    mysql> insert into student values(1,'小花',101,'M'),(2,'小红',102, 'F'),(3,'小军',102,'F'),(4,'小白',101,'F');  #插入多条记录   
    mysql> select count from class  ;  #查询class 表人数  
    mysql> create trigger tri_delete_student after delete on student for each row update class set count=count-1 where id = OLD.class_id; #创建触发器,删除学员班级人数减1
    

    触发器包含多条执行语句

       CREATE   trigger trigger_name BEFORE|AFTER trigger_EVENT     
       ON TABLE_NAME FOR EACH ROW                                 
           BEGIN                                                        
            trigger_STMT                                                 
           END         
    

    在上述语句中,比“只有一条执行语句的触发器”语法多出来两个关键字BEGIN和END,在这两个关键字之间是所要执行的多个执行语句的内容,执行语句之间用分号隔开。

    在MySQL中,一般情况下用“;”符号作为语句的结束符号,可是在创建触发器时,需要用到“;”符号作为执行语句的结束符号。为了解决该问题,可以使用关键字DELIMITER语句。例如,“DELIMITER ” 可 以 将 结 束 符 号 设 置 成 “ ”可以将结束符号设置成“ ”。

    mysql>  use school;   #选择数据库school         
    mysql>  create table grade(id int UNIQUE AUTO_INCREMENT,  math tinyint unsigned, chinese tinyint unsigned, english tinyint unsigned);       #创建成绩表 grade   
    mysql> insert into grade values(1, 80, 87, 91),(2, 72, 64, 89),(3, 54, 69, 87),(4, 78, 79, 89);  #插入多条记录                                      
    mysql> DELIMITER $$                                                                                
    mysql> create trigger tri_delete_student after delete on student for each row 
            BEGIN                                    
             Delete from grade where id = OLD.id;  #删除成绩表中的记录                                                        
             update class set count=count-1 where id = OLD.class_id; #更新班级表中的记录   
             END;                                    
             $$                                       
             DELIMITER ;
    

    具体操作

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    触发器包含多条执行语句
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    结语:

    时间: 2020-07-13

    展开全文
  • 创建触发器

    2018-04-12 14:46:22
    我们来尝试创建一个触发器,要求就是在AddTable这个表上创建一个Update触发器,网上搜索的截图并加工而成。
  • MySQL的触发器使用实例: 解决 触发器被触发后,向表里插入数据时判断该条记录是否存在,如果存在则更新,不存在则插入 的问题 首先,声明一下 mysql 中写的sql执行语句全部在 begin end; 之间。写在begin end...

    MySQL的触发器使用实例:

    解决   触发器被触发后,向表里插入数据时判断该条记录是否存在,如果存在则更新,不存在则插入 的问题

    首先声明一下 mysql  中写的sql执行语句全部在  begin     end;  之间。写在begin end;外面的sql语句无法执行。

    用简单的手动建表的办法,创建两个表。我用这两个表来介绍触发器该怎么使用。

    操作表(触发器所在的表):  table                 执行表(相应触发器的表):   table1                 

    删除触发器(delete) : 在 table 表中删除一条数据的时候,删除触发器(delete)被触发,它需要在 table1 表中插入主键,以及其它字段属性,    因为两个表的主键是一致的,所以 在 table1 中插入数据的时候,如果 已经有主键了,那么就会出现无法插入的动作,所以我们需要判断 table1 表中是否已经有该主键,如果有那么只进行字段的更新,如果没有再进行插入动作。 

    SQL判断 语句在触发器中的实现:  定义的 id 是主键

    BEGIN
      -- SQL语句 定义变量
      SET @id=OLD.id,@name=OLD.name,@image=OLD.image,@A=0;  --在触发器中定义接收变量,用@标识接收变量。  
    
       if (SELECT COUNT(*) AS nums FROM table1 WHERE id=old.id)=0  --判断table1中是否有table表传过来相同的主键。
       then
    --如果table1中没有与传过来相同的主键,那么插入这条数据
        insert into table1(id,name,image,bz) values(@id,@name,MD5(@id+@name),@A);
    
      else
    --如果table1中有相同的主键,那么更新这条数据。
        update table1 set name = @name,image=MD5(@id+@name),bz=@A  where id = old.id;
    --结束判断
        end if;
    
    END;

    MD5(消息摘要算法): 在触发器中是一个负责加密的函数,就好像指纹锁一样,相同的两个数据 用MD5加密 的 hash值也是相同的。MD5可以为文件加密。

    解释一下  @id=OLD.id ,这里@id 是用来接收 OLD.id 的值, 而OLD.id 表示的是 table 表中数据删除之前的id属性值。

    与  OLD  对应的  是 NEW, 如果是  更新触发器 你会用到 NEW 属性, 比如执行更新动作, OLD.id表示的是数据还未更新前的id值,而 NEW.id  则表示的是 数据更新后的 id 值。

    举一个  更新触发器(update)含NEW的例子:(逻辑跟上面的一致)  还是 定义 id 是主键

    BEGIN
    SET @A = 2;
      set @id=new.id,@name=new.name;
       if (SELECT COUNT(*) AS nums FROM table1 WHERE id=new.id)=0 then
       insert into table1(id,name,image,bz) values (@id,@name,new.image,@A);
      else
      update table1 set name =@name,image=new.image,bz=@A  where id = @id;
      end if;
    END;

     

    展开全文
  • MySQL如何创建触发器

    2020-09-09 10:19:49
    主要为大家详细介绍了MySQL如何创建触发器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Oracle创建触发器

    2018-12-15 17:21:03
    创建触发器语法4.触发语句与伪记录变量的值5.示例6.删除触发器7.查询触发器、存储过程及函数 Oracle中创建触发器 1.说明 数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(insert,...


    Oracle中创建触发器

    1.说明

    • 数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。
    • 触发器可用于
      • 数据确认
      • 实施复杂的安全性检查
      • 做审计,跟踪表上所做的数据操作等
      • 数据的备份和同步

    2.类型

    触发器的类型

    • 语句级触发器
      在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行 。
    • 行级触发器(FOR EACH ROW)
      触发语句作用的每一条记录都被触发。在行级触发器中使用:old:new伪记录变量,识别值的状态。

    3.创建触发器语法

    CREATE [or REPLACE] TRIGGER 触发器名
       {BEFORE | AFTER}
       {DELETE | INSERT | UPDATE [OF 列名]}
       ON  表名
       [FOR EACH ROW [WHEN (条件)] ]
    PLSQL块
    

    在触发器中阻止SQL继续执行的方法:
    抛一个错误,raise_application_error(-20000, '现在是非工作时间,不能插入数据');
    错误号码应在-20000到-20999之间(包含,否则提示"错误号参数超出范围")。

    4.触发语句与伪记录变量的值

    触发语句:old:new
    insert所有字段都是空(null)将要插入的数据
    update更新以前该行的值更新后的值
    delete删除以前该行的值所有字段都是空(null)

    5.示例

    例,在工作时间9:00~17:00之外,不能插入数据

    create or replace trigger mytrigger
    before insert
    on emp
    declare
    	-- 变量
    begin
    	if not (to_number(to_char(sysdate, 'hh24')) between 9 and 16) then
    		raise_application_error(-20000, '现在是非工作时间,不能插入数据');
    	end if;
    end;	
    
    insert into emp (empno, ename, sal) values (8001, 'test', 2300);
    

    非工作时间不能插入数据

    例,确认工资数据,更新工资一定不能比之前的少

    create or replace trigger checkSal
    before update
    on emp
    for each row
    declare
        -- 变量
    begin
        if :new.sal < :old.sal then
        	raise_application_error(-20001, '工资不能越涨越少');
        end if;
    end;    
    
    update emp set sal = sal - 1 where empno = 7369;
    

    工资不能越涨越少

    6.删除触发器

    drop trigger mytrigger;
    

    7.查询触发器、存储过程及函数

    描述字典表示例
    存储过程、存储函数、触发器user_sourceSELECT * FROM user_source;
    触发器user_triggersSELECT * FROM user_triggers;
    展开全文
  • Mysql使用sqlyog创建触发器实现主键变为uuid创建自己的表创建触发器触发器的设置触发器生效和结果 创建自己的表 创建一个表格在其中设置自己的主键 创建触发器 触发器的创建直接使用F4可以快捷创建或者打开其他来...

    Mysql使用sqlyog创建触发器实现主键变为uuid

    创建自己的表

    在这里插入图片描述
    创建一个表格在其中设置自己的主键在这里插入图片描述

    创建触发器

    触发器的创建直接使用F4可以快捷创建或者打开其他来选择触发器。在这里插入图片描述

    触发器的设置

    在这里插入图片描述

    触发器的相关设置,这里对应的将所创建的member表中的id设置为uuid,并且将其中的 - 符号取消掉了。

    触发器生效和结果

    在这里插入图片描述
    输入上述语句进行表的元素插入,没有设置相对应的id属性,再插入是触发器生效,将插入元素的id设置为uuid。
    在这里插入图片描述

    展开全文
  • 那以如何在VB+SQLSERVER数据库中创建触发器呢?本例将告诉你答案,如果你是VB6.0编程新手,想了解相关知识,那就更应该看看哦。  创建触发器的语句示例:update k set k.员工编号=j.员工编号,k.员工姓名=j.员工姓名...
  • 本文实例讲述了mysql触发器创建使用触发器。分享给大家供大家参考,具体如下: 我们可以可以使用CREATE TRIGGER语句创建一个新的触发器,来看下具体的语法: CREATE TRIGGER trigger_name trigger_time trigger_...
  • 一、触发器的定义 触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,...对数据库进行drop操作,创建触发器,把操作信息进行记录。 (1)我...
  • mysql 创建触发器

    2018-07-05 16:02:41
    mysql 创建触发器创建触发器的语法如下:CREATE TRIGGER trigger_name trigger_time trigger_eventON tbl_name FOR EACH ROW trigger_stmttrigger_time 是触发器的触发时间,可以是BEFORE 或者AFTER,BEFORE 的含义...
  • 创建使用触发器

    2016-06-15 10:37:57
    创建使用触发器
  • Oracle无法创建触发器

    2019-11-19 18:20:13
    使用SYS AS SYSDBA登录是不能创建触发器的,使用SCOTT用户登录可以创建触发器。 scott用户默认的密码是tiger。 如果没有scott用户可以创建一个,使用SYS AS DBA登录后键入一下命令即可: create user scott ...
  • CREATE DATABASE test;...----- 创建表 CREATE TABLE a (  std_no character varying(32) NOT NULL, -- 学号  subject character varying(32), -- 学科  achievement numeric(5,2), -- 成绩  CONSTRAINT constra
  • pg数据库创建触发器

    2020-06-09 10:58:05
    2、创建触发器 步骤: 先为触发器建一个执行函数,此函数的返回类型为触发器类型 trigger; 然后即可创建相应的触发器。 创建触发器的语法: CREATE [ CONSTRAINT ] TRIGGER name { BEFORE | AFTER | INSTEAD...
  • oracle 创建序列 完整步骤
  • 数据库创建触发器

    2014-05-25 08:09:19
    创建学生管理系统的触发器,可用于课程设计,创建sql数据库学生管理系统,任务
  • mysql创建触发器

    千次阅读 2011-04-29 17:50:00
    mysql创建触发器
  • SQL Server创建触发器

    2009-07-05 20:45:01
    本文主要是介绍创建触发器的必要性,然后介绍触发器的应用场合,以及创建触发器能给我呢带来的好处,最后以实际的代码来阐述创建触发器的具体过程及步骤。
  • MySQL触发器资料整理创建触发器及查看、删除触发器 一、什么是触发器 1、触发器是一种特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是通过事件来触发,比如对一个表进行操作(insert,delete,...
  • 数据库原理的实验。创建触发器和存储过程的实验报告。详细介绍了创建触发器和存储过程的操作步骤
  • sqlserver创建触发器

    千次阅读 2020-04-08 13:05:31
    创建触发器/存储过程的使用 (1)触发器的使用 ①在数据表“学生”中创建update触发器,级联更新“选课”表相应的记录。 ②利用Delete表,将“学生”表中被删除的记录存储到“学生备份”表中,以供日后的数据查询和...
  • 在MSSQLServer中创建触发器.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 152,821
精华内容 61,128
关键字:

创建触发器使用