精华内容
下载资源
问答
  • MySql创建一个删除触发器

    千次阅读 2019-12-17 19:20:03
    使用MySqlWorkbench创建触发器的语法 DELIMITER| CREATE TRIGGER <触发器名> AFTER DELETE ON student FOR EACH ROW BEGIN ...上面是在学生表上建立一个触发器,当从学生表中删除一条记录时,会把...

    使用MySqlWorkbench创建触发器的语法

    DELIMITER|
    CREATE TRIGGER <触发器名> AFTER DELETE ON student
    FOR EACH ROW BEGIN
    	DELETE FROM Grade WHERE stuId=old.stuId;
    END;
    |
    DELIMITER;
    

    上面是在学生表上建立一个触发器,当从学生表中删除一条记录时,会把成绩表中相应的该学生的信息删除掉

    展开全文
  • 创建一个简单的触发器

    千次阅读 2010-05-08 13:02:00
    一、创建一个简单的触发器触发器是一种特殊的存储过程,类似于事件函数,SQL Server™ 允许为 INSERT、UPDATE、DELETE 创建触发器,即当在表中插入、更新、删除记录时,触发一个或一系列 T-SQL语句。触发器可以在...

    一、创建一个简单的触发器

    触发器是一种特殊的存储过程,类似于事件函数,SQL Server™ 允许为 INSERT、UPDATE、DELETE 创建触发器,即当在表中插入、更新、删除记录时,触发一个或一系列 T-SQL语句。

    触发器可以在查询分析器里创建,也可以在表名上点右键->“所有任务”->“管理触发器”来创建,不过都是要写 T-SQL 语句的,只是在查询分析器里要先确定当前操作的数据库。

    创建触发器用 CREATE TRIGGER

    CREATE TRIGGER 触发器名称
    ON 表名
    FOR INSERT、UPDATE 或 DELETE
    AS
        T-SQL 语句

    注意:触发器名称是不加引号的。

    如下是联机丛书上的一个示例,当在 titles 表上更改记录时,发送邮件通知 MaryM。
    CREATE TRIGGER reminder
    ON titles
    FOR INSERT, UPDATE, DELETE
    AS
       EXEC master..xp_sendmail 'MaryM',
          'Don''t forget to print a report for the distributors.'

    二、删除触发器

    用查询分析器删除
    在查询分析器中使用 drop trigger 触发器名称 来删除触发器。
    也可以同时删除多个触发器:drop trigger 触发器名称,触发器名称...
    注意:触发器名称是不加引号的。在删除触发器之前可以先看一下触发器是否存在:
    if Exists(select name from sysobjects where name=触发器名称 and xtype='TR')

    用企业管理器删除
    在企业管理器中,在表上点右键->“所有任务”->“管理触发器”,选中所要删除的触发器,然后点击“删除”。

    三、重命名触发器

    用查询分析器重命名
    exec sp_rename 原名称, 新名称
    sp_rename 是 SQL Server™ 自带的一个存储过程,用于更改当前数据库中用户创建的对象的名称,如表名、列表、索引名等。

    用企业管理器重命名
    在表上点右键->“所有任务”->“管理触发器”,选中所要重命名的触发器,修改触发器语句中的触发器名称,点击“确定”。

    四、more....

    INSTEAD OF
    执行触发器语句,但不执行触发触发器的 SQL 语句,比如试图删除一条记录时,将执行触发器指定的语句,此时不再执行 delete 语句。例:
    create trigger f
    on tbl
    instead of delete
    as
        insert into Logs...

    IF UPDATE(列名)
    检查是否更新了某一列,用于 insert 或 update,不能用于 delete。例:
    create trigger f
    on tbl
    for update
    as
        if update(status) or update(title)
            sql_statement --更新了 status 或 title 列

    inserted、deleted
    这是两个虚拟表,inserted 保存的是 insert 或 update 之后所影响的记录形成的表,deleted 保存的是 delete 或 update 之前所影响的记录形成的表。例:
    create trigger tbl_delete
    on tbl
    for delete
    as
        declare @title varchar(200)
        select @title=title from deleted
        insert into Logs(logContent) values('删除了 title 为:' + title + '的记录')

    说明:如果向 inserted 或 deleted 虚拟表中取字段类型为 text、image 的字段值时,所取得的值将会是 null。

    五、查看数据库中所有的触发器

    在查询分析器中运行:

    use 数据库名
    go
    select * from sysobjects where xtype= 'TR'

    sysobjects 保存着数据库的对象,其中 xtype 为 TR 的记录即为触发器对象。在 name 一列,我们可以看到触发器名称。

    六、sp_helptext 查看触发器内容

    用查询分析器查看

    use 数据库名
    go
    exec sp_helptext '触发器名称'

    将会以表的样式显示触发器内容。
    除了触发器外,sp_helptext 还可以显示 规则、默认值、未加密的存储过程、用户定义函数、视图的文本

    用企业管理器查看

    在表上点右键->“所有任务”->“管理触发器”,选择所要查看的触发器存储过程

    七、sp_helptrigger 用于查看触发器的属性

    sp_helptrigger 有两个参数:第一个参数为表名;第二个为触发器类型,为 char(6) 类型,可以是 INSERT、UPDATE、DELETE,如果省略则显示指定表中所有类型触发器的属性。

    例:

    use 数据库名
    go
    exec sp_helptrigger tbl

     

    八、递归、嵌套触发器

    递归分两种,间接递归和直接递归。我们举例解释如下,假如有表1、表2名称分别为 T1、T2,在 T1、T2 上分别有触发器 G1、G2。

    • 间接递归:对 T1 操作从而触发 G1,G1 对 T2 操作从而触发 G2,G2 对 T1 操作从而再次触发 G1...
    • 直接递归:对 T1 操作从而触发 G1,G1 对 T1 操作从而再次触发 G1...

    嵌套触发器

    类似于间接递归,间接递归必然要形成一个环,而嵌套触发器不一定要形成一个环,它可以 T1->T2->T3...这样一直触发下去,最多允许嵌套 32 层。

    设置直接递归

    默认情况下是禁止直接递归的,要设置为允许有两种方法:

    • T-SQL:exec sp_dboption 'dbName', 'recursive triggers', true
    • EM:数据库上点右键->属性->选项。

    设置间接递归、嵌套

    默认情况下是允许间接递归、嵌套的,要设置为禁止有两种方法:

    • T-SQL:exec sp_configure 'nested triggers', 0 --第二个参数为 1 则为允许
    • EM:注册上点右键->属性->服务器设置。

       

    九、触发器回滚

    我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定的, 如果直接打开数据库表进行更改,同样可以更改其用户名,在触发器中利用回滚就可以巧妙地实现无法更改用户名。

    use 数据库名
    go
    create trigger tr
    on 表名
    for update
    as

        if update(userName)
            rollback tran

    关键在最后两句,其解释为:如果更新了 userName 列,就回滚事务。

    十、禁用、启用触发器

    禁用:alter table 表名 disable trigger 触发器名称
    启用:alter table 表名 enable trigger 触发器名称

    如果有多个触发器,则各个触发器名称之间用英文逗号隔开。

    如果把“触发器名称”换成“ALL”,则表示禁用或启用该表的全部触发器。

    展开全文
  • MySQL触发器资料整理创建触发器及查看、删除触发器 一、什么是触发器 1、触发器是一种特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是通过事件来触发,比如对一个表进行操作(insert,delete,...

                          MySQL触发器资料整理创建触发器及查看、删除触发器

     

    一、什么是触发器

    1、触发器是一种特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是通过事件来触发,比如对一个表进行操作(insert,delete,update)的时候,就会执行它。 (触发器概念

    2、区别:触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。

     

    二、创建触发器

    1、 语法

    create
        TRIGGER trigger_name
        trigger_time trigger_event
        ON table_name FOR EACH ROW
    BEGIN
        # do something
    END;
    

    2、关键词说明

                     a. trigger_name: 触发器名称,唯一不可重复的。

                     b. trigger_time: 触发器执行时间 。 {BEFORE / AFTER} 表示事件之前或之后执行。

                     c. trigger_event:触发触发器的事件。{INSERT / DELETE / UPDATE}某个事件执行 

    • INSERT 当新的一行数据插入表中时触发,如执行insert,load data,replace语句插入新数据
      • DELETE 当表的一行数据被删除时触发,如执行delete,replace语句
      • UPDATE 当表的一行数据被修改时触发,如执行update语句时

                     d. table_name:触发器作用于某张表上。

     

    3.1、示例 --- 创建一个 update 触发器

    CREATE
        TRIGGER update_client
        AFTER UPDATE
        on client for each ROW
    BEGIN
        INSERT INTO `client_log` (
            `client_id`,
            `modify_flag`,
            `name`,
            `contact`,
            `phone`,
            `email`,
            `remarks`,
            `del_flag`,
            `create_date`,
            `create_by`,
            `update_date`,
            `update_by`
        )
        VALUES(
            old.id,
            "修改--原数据",
            old.name,
            old.contact,
            old.phone,
            old.email,
            old.remarks,
            old.del_flag,
            old.create_date,
            old.create_by,
            old.update_date,
            old.update_by
        );
    END;

    3.2、示例---创建一个 insert 触发器

    DELIMITER $ # (使用 DELIMITER 将语句分隔符改为 $)
    CREATE
        TRIGGER insert_client
        AFTER INSERT
        on client for each ROW
    BEGIN
        INSERT INTO `chapter`.`client_log` (
            `client_id`,
            `modify_flag`,
            `name`,
            `contact`,
            `phone`,
            `email`,
            `remarks`,
            `del_flag`,
            `create_date`,
            `create_by`,
            `update_date`,
            `update_by`
        )
        VALUES(
            new.id,
            "新增数据",
            new.name,
            new.contact,
            new.phone,
            new.email,
            new.remarks,
            new.del_flag,
            new.create_date,
            new.create_by,
            new.update_date,
            new.update_by
        );
    END$
    DELIMITER $
    
    

    4、old 、 new 说明

                      a. old :表示 修改 或 删除 之前的字段数据

                      b. new:表示 修改之后 或 插入的字段数据。(插入 之前、之后都可以)

     

    三、查看触发器

    1、

     show triggers ;

    2、

    SELECT a.* from information_schema.`TRIGGERS` a [ where a.TRIGGER_NAME = 'update_client' ] ;

     

    四、删除触发器

    1、 DROP TRIGGER IF EXISTS trigger_name ;

    2、示例:

    DROP TRIGGER IF EXISTS update_client ;

     

     

    五、触发器的执行顺序

    1、我们建立的数据库一般都是 InnoDB 数据库,若SQL语句或触发器执行失败,MySQL 会回滚事务,有:

                     ①若 BEFORE 触发器执行失败,则 SQL 无法正确执行。

          ②若 SQL 执行失败时,则 AFTER 型触发器不会触发。

          ③若 AFTER 触发器执行失败,则 SQL 会回滚。

     

    2、执行顺序图解

     

     

    补充:若有疑问,可私信联系。 需要示例代码完整脚本,请私信练习,谢谢。

     

    参考资料: MySQL触发器使用详解

                       MySQL存储过程学习整理,游标使用,参数输入输出

    MySQL触发器资料整理创建触发器及查看、删除触发器

    MySQL存储过程学习整理,游标使用,参数输入输出

     MyBatis调用存储过程,MyBatis调用函数的使用方法

    MySQL 创建函数, MySQL定义函数实现汉字转拼音 MySQL汉字转拼音MySQL汉字生成拼音字符串

    MySQL WHILE和LOOP和REPEAT循环的用法区别 MySQL三种循环的区别 MySQL循环使用方法

            MySQL创建视图

     

    展开全文
  • 1、当我连续执行创建个触发器时,总是报编译通过,但存在警告或错误。如下: create or replace trigger tr_advert before insert on jcms_advert for each row begin select seq_advert.nextval into :new.id ...

    1、当我连续执行创建多个触发器时,总是报编译通过,但存在警告或错误。如下:
    create or replace trigger tr_advert  
    before insert on jcms_advert 
    for each row
    begin
     select seq_advert.nextval into :new.id from dual;
    end;

    create or replace trigger tr_advert_type  
    before insert on jcms_advert_type 
    for each row
    begin
     select seq_advert_type.nextval into :new.id from dual;
    end;
    这种创建是失败的,

    因为触发器需要先编译,每创建一个触发器,需要以“/”结束并且添加alter trigger 触发器名称 enable;,然后才能执行下一个。

    再次执行的时候,需要先删除创建失败的触发器,重点,敲黑板了。。。。

     

     

     

     


    2、正确的创建方法如下:
    create or replace trigger tr_advert  
    before insert on jcms_advert 
    for each row
    begin
     select seq_advert.nextval into :new.id from dual;
    end;
    /
    alter trigger tr_advert enable;

    create or replace trigger tr_advert_type  
    before insert on jcms_advert_type 
    for each row
    begin
     select seq_advert_type.nextval into :new.id from dual;
    end;
    /
    alter trigger tr_advert_type enable;

     

    执行完之后刷新查看,
    ————————————————

     

    展开全文
  • 创建级联删除触发器

    2013-02-03 13:39:00
    1、创建级联删除触发器 USE [xiaoqu]GoCreate trigger delestOn Cash1 for delete as delete from Cash where Id in (select Id from deleted) delete from YingShou where Id in (select Id from deleted) ...
  • 在DB2中创建一个触发器

    千次阅读 2008-02-26 10:15:00
    当特定事件在 IBM® DB2® Universal Database™ 数据库...您还将学习如何使用 DB2 UDB Version 8.1 的控制中心来帮助您创建一个应用于简单业务场景的简单触发器。 什么是触发器一个指定的 SQL 操作(如 DELETE,IN
  • 当特定事件在 IBM® DB2® Universal Database™ ...您还将学习如何使用 DB2 UDB Version 8.1 的控制中心来帮助您创建一个应用于简单业务场景的简单触发器。  什么是触发器一个指定的 SQL 操作(如 DELETE,IN...
  • 个触发器的作用是,对表inventory任意字段的值进行修改,先判断是否对remark这字段是否进行了修改, 如果修改了,就在inventory_log表的l_type字段中插入'upd' 如果没有修改,就在inventory_log标的l_type字段...
  • 当对一张表,进行更新、删除、插入等操作时,会需要对...但是有时我们需要监控,指定列的更新,只有当某一列更新 或者 只有当某一列更新为某一个数值时 我们才启动触发器 这是只要稍加改动,在BEGIN 之前加上限制条件
  • 触发器一个特殊的存储过程,存储过程是需要手动调用的,而触发器是程序自动出发的,比如在对某张表进行删除操作前执行触发器。可以设置在增删除操作前或者之后执行 1.确认mysql服务开启。 。 2.连接...
  • 触发器是一种特殊的存储过程,类似于事件函数,SQL Server™ 允许为 Insert、Update、Delete 创建触发器,即当在表中插入、更新、删除记录时,触发一个或一系列 T-SQL语句。触发器可以在查询分析器里创建,也可以在...
  • 创建存储过程,触发器

    2009-06-22 13:02:30
    创建存储过程 执行存储过程 查看和修改存储过程 重命名和删除存储过程 创建触发器 查看、修改和删除触发器 触发器的应用
  • 创建删除mysql触发器 举例如下: 现有表tab1和tab2 要求触发器具有下面功能 当对tab1插入条记录时则tab2也插入相同的记录 1 2 3 4 5 6 7 8 mysql>delimiter // mysql> CREATE TRIGGER t_after...
  • 删除Drop trigger tri_cus_wallet_update;创建DELIMITER $CREATE TRIGGER tri_cus_wallet_update AFTER UPDATE ON cus_wallet FOR EACH ROWBEGININSERT INTO cus_wallet_his(orgid,userid,rechargemoney,...
  • PostgreSQL触发器创建触发器

    千次阅读 2018-09-21 14:43:58
    触发器(Trigger)是种由事件自动触发执行的特殊的存储过程,这些事件是对表的插入、更新、删除等操作。  现在,创建学生表和成绩表。用触发器实现:当删除学生表中的条记录时,其在成绩表中的记录也被删除了...
  • 创建触发器 在MySQL中创建触发器通过SQL语句CREATE TRIGGER来实现,其语法形式如下: CREATE trigger trigger_name BEFORE|AFTER trigger_EVENT ON TABLE_NAME FOR EACH ROW trigger_STMT 在上述语句中,参数trigger...
  • 本文将介绍如何使用PL/SQL Developer快速的创建一个触发器,应该明确的是鼠标的所有操作都是可以用代码实现的
  • select * from YLXZ_PERSON insert into YLXZ_PERSON(name) VALUES('嘘嘘') DELETE from YLXZ_PERSON where name ='嘘嘘' update YLXZ_PERSON ...//创建序列 CREATE SEQUENCE PERSON_sequence INCREMENT BY 1 -- ...
  • 一、创建一个Oracle用户 打开pl/sql,使用system登录。 右击Users -> new 设置用户名、密码。。。如下: 设置角色权限 设置表空间,如果不设置会报错 二、触发器 2.1 触发器介绍 在Oracle系统里,触发器...
  • 这是我在做数据库课程设计 (银行卡管理系统) 时创建的日志管理触发器和遇到的错误 错误1: 创建了重复的触发器 ERROR 1235 (42000): This version of MySQL doesnt yet support multiple triggers with the same ...
  • 创建与使用触发器

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

    2018-06-08 12:33:22
    查看触发器show triggers;查看triggers表中的触发器信息SELECT * FROM information_schema.triggers;查看特定触发器信息SELECT * FROM information...创建触发器语句格式:触发单个语句↓delimiter // create trigge...
  • 触发器删除创建等操作

    千次阅读 2019-04-23 17:42:56
    触发器是一种特殊的存储过程,类似于事件函数,SQL Server™ 允许为 INSERT、UPDATE、DELETE 创建触发器,即当在表中插入、更新、删除记录时,触发一个或一系列 T-SQL语句。 触发器可以在查询分析器里创建,也可以在...
  • 1、mysql触发器是:在当前的数据库表中设置一个对每行数据的一个监听器,监听相关事件,每当事件发生时。会执行一段由sql完成的一段功能代码。这段功能代码也是sql语句。 2、触发器的元素: 事件,执行代码。 二...
  • A表(column1(主键),column2,column3,column4)中有行数据,为S001,姓名,年龄,生日,通过存储过程自动创建stuent表,有姓名,年龄,生日三属性,其中,年龄为int型,生日为date型。在不修改主键S0001的情况...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 92,220
精华内容 36,888
关键字:

创建一个删除触发器