精华内容
下载资源
问答
  • 2018-08-27 21:26:29

    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); 

    delimiter // (分界符://    因为下面要执行多条语句,而每条语句以分号结束,这里用 // 代表下面多条语句作为一段语句执行,// 可以换成其他非分号的字符)

    create trigger testref before insert on test1 (create trigger 触发器名字 触发器执行时机  触发器触发的事件 on 表名)

    for each row begin

    insert into test2 values(new.a1);    (通过new.调用test1表的字段a1值)

    delete from test3 where a3 = new.a1;

    update test4 set b4 = b4 + 1 where a4 = new.a1;

    end //

    delimiter  ; (注:delimiter与分号之间留有一个空格位置)

    接下来对test1执行insert操作就会触发触发器操作。

     

    ---------------转载 《MySql 5.7 从入门到精通》

    更多相关内容
  • 先给结论,trigger 可以看成是 给操作表的 update 语句加上一个小尾巴,这个小尾巴不捣乱,update 语句就能顺利的更改表,如果这个小尾巴想破环,那么 update 整条语句就不能正确执行,导致更新表失败。 解释如下, ...

    先给结论,trigger 可以看成是 给操作表的 update 语句加上一个小尾巴,这个小尾巴不捣乱,update 语句就能顺利的更改表,如果这个小尾巴想破环,那么 update 整条语句就不能正确执行,导致更新表失败。
    解释如下,
    当给一个表,加了 update trigger,这是前提,
    当对一个表的 update,最终是否能成功更新表,也就是将更新的结果写进表中,要看这步操作触发的 trigger 是否同意,如果,trigger 允许,那么 update 就可以成功把结果写进表中达到更新的目的,但是,如果 , trigger 不同意,那么即使 update 语句本身没有问题其自身执行也很顺利,也不能把结果写入表中。
    在 trigger 中,
    trigger 的语句 after update 这一步的结果是 ,
    update 命令 顺利执行了,但表还没有被更改,记录还没有改写,
    接下来,还要看trigger 是否同意 update 去修改表,

    按正常的情况,表就被更新了,
    但,这是在 trigger 中,我们可以 ,让它新,也可以,不让它更新,
    这取决于我们对 trigger 的设置,

    能这样的原因,是,trigger 会 on 到一个 表上,关联 update 操作
    当,对这个表 进行 update 操作的时候,会触发 trigger ,
    请注意,这时候,update 虽然 已经执行了,但是,还没有能真正去 改变表,
    因为,它 触发了 trigger,还要等 trigger 的意见。

    我做了个实验,给我的感觉是,一旦给 表 建立了一个 由 update 触发的 trigger ,
    当对表执行 update 时,这条 update 语句就加上了一个小尾巴,
    如果,这个小尾巴 报错,那么这条 update 整条语句就会出错,导致 update 没有执行成功,

    举个最简单的例子,

    update tablename set id=1 where id=1;
    

    但是如果,我们给这条语句加上一个小尾巴,比如 几个空格,如下:

    update tablename set id=1 where id=1     ;
    

    并不会影响 update 的正确执行,

    但,如果,我们给 加上个 星号 什么的,如下:

    update tablename set id=1 where id=1 *;
    

    那么这条语句,必定报错,从而,执行失败,必须等你我们将 星号这个小尾巴去掉,语句才能正常执行,

    trigger 就是起到这个小尾巴的作用,

    产生这篇文章的原因是:
    我在做实验的时候,遇到了
    after update on tablename
    这条语句,
    我始终想不明白,update 都已经 先于 trigger 执行了,即便 trigger 不同意,又能怎么样呢,你毕竟是,after update,在update 执行之后 才出现的, 所以,update 都已经执行了,结果都写到表里了,你trigger不同意又能怎样呢!
    但,我还是年轻啊,trigger 可没有这么简单,
    它把自己和 update 捆绑到一起了,
    相当于 给 update 语句 加了个小尾巴,
    trigger 想让 update 执行成功,小尾巴就是 空格,
    trigger 不想让 update 执行成功,小尾巴就是 *星号,

    上例子,
    在这里插入图片描述

    我有一个 trigger 叫 limitprice关于 表 g 的 update 操作,
    作用是,当要 updateg 的时候,如果新值 比 原值 大 1/5 以上,就不能更改表,

    展现一下 表 g,
    在这里插入图片描述
    毛笔,id=1,price=5,
    5的 1/5 是 1,
    所以,大于6 的新值都不能写进表里,
    做2个验证,

    在这里插入图片描述
    可以看出来,trigger 就是通过,把自己和 update 语句 绑定到一起,来达到 控制 update 语句是否可以成功执行的目的,
    这里的,after ,虽然是update 先于 trigger 执行 ,但update 语句 成不成功 还得看 trigger。

    在这里插入图片描述
    不知道,为什么,我用的这个版本,before 和 after 的 trigger 效果一样,
    先,写到这里吧,可能是我的MySQL 出现了问题,
    按道理说,before 和 after 应该有区别才对。
    January the 20th 2022 Friday

    展开全文
  • MySQL TRIGGER

    千次阅读 2017-11-27 18:43:00
    触发器(TRIGGER)是MySQL的数据库对象之一,从5.0.2版本开始支持。该对象与编程语言中的函数非常类似,都需要声明、执行等。但是触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发、激活从而实现...

    以下内容来源于 MySQL 触发器简单实例文章。

    触发器(TRIGGER)是MySQL的数据库对象之一,从5.0.2版本开始支持。该对象与编程语言中的函数非常类似,都需要声明、执行等。但是触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发、激活从而实现执行。有点类似DOM中的事件。

    语法

    CREATE TRIGGER <触发器名称>  --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.
    { BEFORE | AFTER }  --触发器有执行的时间设置:可以设置为事件发生前或后。
    { INSERT | UPDATE | DELETE }  --同样也能设定触发的事件:它们可以在执行insertupdatedelete的过程中触发。
    ON <表名称>  --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。
    FOR EACH ROW  --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。
    <触发器SQL语句>  --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。
    
    --你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。
    
    

    例子
    - 创建两个表

    DROP TABLE IF EXISTS tab1;
    
    CREATE TABLE tab1(
        tab1_id varchar(11)
    );
    
    DROP TABLE IF EXISTS tab2;
    CREATE TABLE tab2(
        tab2_id varchar(11)
    );
    
    • 创建 插入触发器:
    DROP trigger if exists t_insert;
    delimiter $
    create TRIGGER t_insert
    AFTER INSERT on tab1
    for EACH ROW
    BEGIN
        insert into tab2(id) values(new.id);
    END;
    
    delimiter ;
    
    insert into tab1(id) VALUES('1');
    • 创建删除触发器:
    DROP trigger if exists t_insert;
    delimiter $
    create TRIGGER t_insert
    AFTER DELETE on tab1
    for EACH ROW
    BEGIN
        DELETE from tab2 WHERE id=old.id;
    END;
    
    delimiter ;
    
    DELETE from tab1 WHERE id=1;

    触发器里面可以有多个执行语句

    【参考】

    mysql之触发器trigger

    MySQL 触发器简单实例

    如果不清楚 delimiter是怎么用的,欢迎查看MySQL DELIMITER

    展开全文
  • Mysql Trigger

    2016-09-25 19:04:07
    Mysql Trigger官方说明文档 基本格式 create trigger trigger_name before/after insert/update/delete on table_name for each row begin …… end for each row在Mysql当中是必须的 可以使用old和new表示...

    Mysql Trigger

    官方说明文档

    • 基本格式
      create trigger trigger_name
      before/after insert/update/delete on table_name
      for each row
      begin
      ……
      end
    • for each row在Mysql当中是必须的
    • 可以使用old和new表示原来的数据及新插入的表项
    • insert触发器中不能使用old,delete中不能使用new
    • old是只读的,用set对new操作在insert时只在before时间点有效
    • 对应一个表格的一个类型的一个时间点只能创建一个触发器
    delimiter $
    
    create trigger country_trigger
    
    before insert on iscountry
    
    for each row
    
    begin
    
    if(new.name not in(select * from country)) then
    
    insert into country values(new.name);
    
    end if;
    
    end$
    展开全文
  • 2,官方定义触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的...
  • mysql trigger

    2020-05-08 17:27:47
    CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt trigger_name:触发器的名称 tirgger_time:触发时机,为BEFORE或者AFTER trigger_event:触发事件,为INSERT、...
  • 普通用户在创建trigger时会遇到的问题:  1、如果开启了二进制日志,但是用户没有supper 权限;那么他在创建trigger 时会提示设置log_bin_trust_function_creators=1   trigger 的一些限制:  1、同一个表的...
  • MysqlTrigger基本语法

    2021-01-19 10:16:10
    mysql5新添加的功能。1 创建基本语法:create trigger trigger_name trigger_time trigger_eventon table_namefor each row trigger_stmttrigger_name:自行定义触发器名字;trigger_time:标识触发时机,before 或 ...
  • mysql触发器(trigger)

    千次阅读 2022-02-10 17:04:34
    当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,mysql就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的规则。 触发器经常用于加强数据的完整性约束和业务规则等。 ...
  • 一文搞懂MySQL触发器trigger的使用

    万次阅读 2021-04-21 02:19:32
    例2:定义一个触发器,一旦有满足条件的删除操作,就会执行BEGIN和END中的语句 mysql> DELIMITER || mysql> CREATE TRIGGER trig2 BEFORE DELETE -> ON work FOR EACH ROW -> BEGIN -> INSERT INTO time VALUES(NOW...
  • MySQL Trigger(触发器)简例

    千次阅读 2017-08-14 17:29:21
    MySQL Trigger(触发器)实例
  • 主要介绍了MySQL 触发器定义与用法,结合简单实例形式总结分析了mysql触发器的语法、原理、定义及使用方法,需要的朋友可以参考下
  • mysql触发器实例

    2018-01-12 16:46:10
    内含mysqltrigger触发器实例,修改即可使用。。。。。。
  • mysql trigger触发器简述

    2017-10-24 15:12:16
    简介触发器属于mysql的一个高级特性,它可以算是一个简化版的存储过程。与真正的存储过程不同的是,它不是被call调用的,而是在检测到满足条件的操作后自动执行的,类似于系统监控与告警的关系。mysql的触发器只支持...
  • mysql通过触发器实现两个表的同步 目前,在本地测试成功。 假设本地的两个数据库a和b,a下有表table1(id, val) b下有表table2(id, val) 假设希望当table1中数据更新,table2中数据同步更新。 代码: DELIMITER $...
  • 删除触发器的语法: Drop trigger 触发器名 查看触发器 Show triggers 如何在触发器引用行的值 对于insert而言, 新增的行 用new 来表示, 行中的每一列的值 ,用new.列名来表示. 对于 delete来说, 原本有一行,后来被...
  • MySQL trigger触发器

    2019-05-23 20:33:28
    一、触发器概述 只有表才支持触发器,视图不支持(临时表也支持) 触发器的类型 insert型触发器:插入数据时触发(通过insert、... 其他MySQL语句不支持触发器 保证每个数据库的触发器名唯一 触发器名在一个...
  • 方式1:查看当前数据库的所有的触发器的定义 show trigger\G 方式2:查看当前数据库中某个触发器的定义 show create trigger 触发器名 方式3:从系统库information_schema的triggers表中查询"salary_check_trigger...
  • mysql触发器trigger 实例详解

    千次阅读 2018-12-25 17:07:56
    MySQL好像从5.0.2版本就开始支持触发器的功能了 创建触发器 CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt trigger_name:触发器的名称 tirgger_time:触发时机...
  • 触发器语句先贴出来:DELIMITER $$CREATE TRIGGER goods_sku_shopprice_trigger AFTER UPDATE ON t_sku FOR EACH ROWBEGINSET @oldPrice = (SELECT t_goods.shop_price FROM t_goods WHERE t_goods.goods_id=new....
  • In MySQL BEFORE INSERT TRIGGER how can I skip data insertion under condition?delimiter //drop trigger if exists test_trigger //create trigger test_trigger before insert on tfor each rowbeginset @found...
  • 如何调试 mysql 触发器 trigger

    千次阅读 2019-06-25 22:20:03
    第一步,创建一张临时表 t (x,cc) 第二步,set globalgeneral_log=on;(立即生效,无需重启mysql) ...就可以根据日志输出结果来判断trigger 是哪一步异常没有执行下去; ####待调试的触发器如下 CREATE...
  • MySQL触发器(trigger):监视某种情况并触发某种操作一:四要素触发时间:before/after地点:table监视操作:insert/update/delete触发操作:insert/update/delete二:创建触发器delimiter $ #将sql结束符改为$ 方便...
  • mysqldump描述如下:用mysqldump 导出 Trigger 的时候遇到一个问题,贴出来,以免大家犯错。在执行下面的操作时:[root@ytt ~]# /usr/... test.sql导出的结果里面含有 Trigger.[root@ytt ~]# /usr/local/mysql/b...
  • 触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和...
  • MySQL数据库:触发器Trigger

    万次阅读 2018-11-28 19:18:43
    而在MySQL中,分号是语句结束的标识符,遇到分号表示该段语句已经结束,MySQL可以开始执行了。因此,解释器遇到statement_list 中的分号后就开始执行,然后会报出错误,因为没有找到和 BEGIN 匹配的 END。 这时就...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,277
精华内容 20,510
关键字:

mysql trigger

mysql 订阅