精华内容
下载资源
问答
  • MySQL触发器如何正确使用 2010-05-18 15:58 佚名 博客园 字号:T | T ...我们今天主要向大家介绍的是MySQL触发器进行正确使用,其中包括对MySQL触发器发...以下的文章主要描述的是如何对MySQL触发器进行正确使...

    MySQL触发器如何正确使用

    2010-05-18 15:58 佚名 博客园 字号:T | T
    一键收藏,随时查看,分享好友!

    我们今天主要向大家介绍的是MySQL触发器进行正确使用,其中包括对MySQL触发器发器的语句创建,触发时间与触发事件等相关内容介绍。

    AD:51CTO 网+首届APP创新评选大赛火热启动——超百万资源等你拿!

    以下的文章主要描述的是如何对MySQL触发器进行正确使用, MySQL数据库是在5.0 以后的相关版本中对MySQL触发器进行引用,有时也可以用相关的触发器对数据的完整性进行维护。如我有一个表ge_element。

    该表中有一个region_id,对应到ge_region表中的id,但是,region_id是可以为空的,所以不应该设置外键约束,而我在删 除ge_region表中的记录时,希望把在ge_element表中被引用到的记录的region_id设为0,因为没有数据库的外键约束,我只能在程 序中操作,但我又不想通过程序来操作,因为引用region_id的表可能不只ge_element一个,这时,就可能用到MySQL触发器,在删除 ge_region表中的记录时,把被引用的表中的region_id设为0。

    1.创建触发器的语句:

    CREATE TRIGGER <触发器名称> <--

    { BEFORE | AFTER }

    { INSERT | UPDATE | DELETE }

    ON <表名称>

    FOR EACH ROW

    <触发器SQL语句>

    触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.

    这里我有个习惯:就是用表的名字+'_'+触发器类型的缩写.因此如果是表t26,触发器是在事件UPDATE(参考下面的点(2)和(3))之前(BEFORE)的,那么它的名字就是t26_bu。

    可以直接在EMS中创建触发器。

    2.触发时间:

    Before表示在事件发生之前执行MySQL触发器,After表示在事件发生之后执行触发器;

    3.触发事件:

    三个事件:insert, update, delete

    4.触发器与表的关系:

    触发器是属于一个表的,当在这个表上执行insert, update, delete操作时,就会导致相应的触发器被激活;

    不能给同一个表的同一个操作创建两个不同的触发器。

    5.触发间隔:

    FOR EACH ROW 子句通知MySQL触发器每隔一行执行一次动作,而不是对整下表执行一次。

    6.触发的SQL语句:

    触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句,包括复合语句,但是这里的语句受的限制和函数的一样。

    复合语句(BEGIN / END)是合法的.

    流控制(Flow-of-control)语句(IF, CASE, WHILE, LOOP, WHILE, REPEAT, LEAVE,ITERATE)也是合法的.

    变量声明(DECLARE)以及指派(SET)是合法的.

    允许条件声明.

    异常处理声明也是允许的.

    但是在这里要记住函数有受限条件:不能在函数中访问表.因此在函数中使用以下语句是非法的。

    7.创建触发器的权限:

    你必须要有相当大的权限才能够创建MySQL触发器;我在创建触发器的时候提示要有super privilege才可以创建;

    转载于:https://www.cnblogs.com/xdot/p/5088054.html

    展开全文
  • 下面的文章主要描述的是MySQL触发器正确创建步骤,MySQL触发器的删除,你如果对MySQL触发器正确创建步骤,MySQL触发器的删除有兴趣的话你就可以点击以下的文章进行观看了。1、创建MySQL触发器:语法:...

    下面的文章主要描述的是MySQL触发器的正确创建步骤,MySQL触发器的删除,你如果对MySQL触发器的正确创建步骤,MySQL触发器的删除有兴趣的话你就可以点击以下的文章进行观看了。

    1、创建MySQL触发器:

    语法:

    CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name

    FOR EACH ROW

    BEGIN

    trigger_stmt

    END;

    CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name

    FOR EACH ROW

    BEGIN

    trigger_stmt

    END;

    例子

    CREATE TRIGGER SetUserHome after insert ON users

    FOR EACH ROW

    BEGIN

    update `users` set homeLocationX = 128,

    homeLocationY=128, homeLocationZ=30

    where uuid = NEW.uuid

    END

    以上的例子是错误的, 让本表进行触发时进行更新会让程序进入死循环。

    系统会报这样的错误:it is already used by statement which invoked this stored function/trigger.

    应该改成以下语句:

    CREATE TRIGGER SetUserHome before insert ON users

    FOR EACH ROW

    BEGIN

    set New.homeLocationX = 128;

    set New.homeLocationY = 128;

    set New.homeLocationZ=30;

    END

    大写的为关键字

    trigger_name:触发器的名字,我常用的命名规则t_name_tableName_(b|a)(i|u|d),t:MySQL触发器标识,name:英文名,tableName:表名,b(BEFORE):标识是触发事件之前,a(AFTER):标识触发事件之后,i(insert):标识insert事件,u(update):标识update事件,d(delete):标识delete事件;

    trigger_time:触发时间(BEFORE或AFTER)

    trigger_event:事件名(insert或update或delete)

    tbl_name:表名(必须是永久性表)

    trigger_stmt:执行语句(可以是复合语名),使用别名OLD和NEW,能够引用与触发程序相关的表中的列。

    2、删除解发器

    语法:

    DROP TRIGGER [schema_name.]trigger_name;

    注意:以上操作均需SUPER权限

    示例:

    DROP TRIGGER t_wiley_hotelComment_bu;

    delimiter //

    CREATE TRIGGER t_wiley_hotelComment_bu BEFORE UPDATE ON hotel_comment

    FOR EACH ROW

    BEGIN

    IF OLD.ispass=0 && NEW.ispass=1 THEN

    UPDATE hotel_info SET sumcommentsumcomment=sumcomment+1,

    sumconsumesumconsume=sumconsume+NEW.consume,sumservicesumservice=sumservice+NEW.service,

    sumroomsumroom=sumroom+NEW.room,sumentironsumentiron=sumentiron+NEW.entironment,

    totaltotal=total+(NEW.service+NEW.room+NEW.entironment) WHERE hotel_id=NEW.hotel_id;

    ELSEIF OLD.ispass=1 && NEW.ispass=0 THEN

    UPDATE hotel_info SET sumcommentsumcomment=sumcomment-1,

    sumconsumesumconsume=sumconsume-NEW.consume,sumservicesumservice=sumservice-NEW.service,

    sumroomsumroom=sumroom-NEW.room,sumentironsumentiron=sumentiron-NEW.entironment,

    totaltotal=total-(NEW.service+NEW.room+NEW.entironment) WHERE hotel_id=NEW.hotel_id;

    END IF;

    END;//

    delimiter ;

    以上的相关内容就是对MySQL触发器的使用的介绍,望你能有所收获。

    展开全文
  • 下面的文章主要描述的是mysql触发器正确创建步骤,MySQL触发器的删除,你如果对MySQL触发器正确创建步骤,MySQL触发器的删除有兴趣的话你就可以点击以下的文章进行观看了。 1、创建MySQL触发器: 语法: ...

    下面的文章主要描述的是mysql触发器的正确创建步骤,MySQL触发器的删除,你如果对MySQL触发器的正确创建步骤,MySQL触发器的删除有兴趣的话你就可以点击以下的文章进行观看了。

    1、创建MySQL触发器:

    语法:

    1. CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name   
    2. FOR EACH ROW   
    3. BEGIN   
    4. trigger_stmt   
    5. END;   
    6. CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name  
    7. FOR EACH ROW   
    8. BEGIN  
    9. trigger_stmt  
    10. END;  

    例子

    1. CREATE TRIGGER SetUserHome after insert ON users   
    2. FOR EACH ROW   
    3. BEGIN   
    4. update `users` set homeLocationX = 128,  
    5. homeLocationY=128homeLocationZ=30   
    6. where uuid = NEW.uuid  
    7. END  

    以上的例子是错误的, 让本表进行触发时进行更新会让程序进入死循环。

    系统会报这样的错误:it is already used by statement which invoked this stored function/trigger.

    应该改成以下语句:

    1. CREATE TRIGGER SetUserHome before insert ON users   
    2. FOR EACH ROW   
    3. BEGIN   
    4. set New.homeLocationX = 128;  
    5. set New.homeLocationY = 128;  
    6. set New.homeLocationZ=30;   
    7. END  

    大写的为关键字

    trigger_name:触发器的名字,我常用的命名规则t_name_tableName_(b|a)(i|u|d),t:MySQL触发器标识,name:英文名,tableName:表名,b(BEFORE):标识是触发事件之前,a(AFTER):标识触发事件之后,i(insert):标识insert事件,u(update):标识update事件,d(delete):标识delete事件;

    trigger_time:触发时间(BEFORE或AFTER)

    trigger_event:事件名(insert或update或delete)

    tbl_name:表名(必须是永久性表)

    trigger_stmt:执行语句(可以是复合语名),使用别名OLD和NEW,能够引用与触发程序相关的表中的列。

    2、删除解发器

    语法:

    1. DROP TRIGGER [schema_name.]trigger_name;  

    注意:以上操作均需SUPER权限

    示例:

    1. DROP TRIGGER t_wiley_hotelComment_bu;   
    2. delimiter //   
    3. CREATE TRIGGER t_wiley_hotelComment_bu BEFORE UPDATE ON hotel_comment   
    4. FOR EACH ROW   
    5. BEGIN   
    6. IF OLD.ispass=0 && NEW.ispass=1 THEN   
    7. UPDATE hotel_info SET sumcommentsumcomment=sumcomment+1,

      sumconsumesumconsume=sumconsume+NEW.consume,sumservicesumservice=sumservice+NEW.service, 

      sumroomsumroom=sumroom+NEW.room,sumentironsumentiron=sumentiron+NEW.entironment,

      totaltotal=total+(NEW.service+NEW.room+NEW.entironment) WHERE hotel_id=NEW.hotel_id;   
    8. ELSEIF OLD.ispass=1 && NEW.ispass=0 THEN   
    9. UPDATE hotel_info SET sumcommentsumcomment=sumcomment-1,

      sumconsumesumconsume=sumconsume-NEW.consume,sumservicesumservice=sumservice-NEW.service, 

      sumroomsumroom=sumroom-NEW.room,sumentironsumentiron=sumentiron-NEW.entironment,

      totaltotal=total-(NEW.service+NEW.room+NEW.entironment) WHERE hotel_id=NEW.hotel_id;   
    10. END IF;   
    11. END;//   
    12. delimiter ;  

    以上的相关内容就是对MySQL触发器的使用的介绍,望你能有所收获。

    展开全文
  • 下面的文章主要描述的是MySQL触发器正确创建步骤,MySQL触发器的删除,你如果对MySQL触发器正确创建步骤,MySQL触发器的删除有兴趣的话你就可以点击以下的文章进行观看了。 1、创建MySQL触发器: 语法: ...

    下面的文章主要描述的是MySQL触发器的正确创建步骤,MySQL触发器的删除,你如果对MySQL触发器的正确创建步骤,MySQL触发器的删除有兴趣的话你就可以点击以下的文章进行观看了。

    1、创建MySQL触发器:

    语法:

    1. CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name   
    2. FOR EACH ROW   
    3. BEGIN   
    4. trigger_stmt   
    5. END;   
    6. CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name  
    7. FOR EACH ROW   
    8. BEGIN  
    9. trigger_stmt  
    10. END;  

     

    例子

     

     

    1. CREATE TRIGGER SetUserHome after insert ON users   
    2. FOR EACH ROW   
    3. BEGIN   
    4. update `users` set homeLocationX = 128,  
    5. homeLocationY=128, homeLocationZ=30   
    6. where uuid = NEW.uuid  
    7. END  

     

    以上的例子是错误的, 让本表进行触发时进行更新会让程序进入死循环。

     

    系统会报这样的错误:it is already used by statement which invoked this stored function/trigger.

    应该改成以下语句:

    1. CREATE TRIGGER SetUserHome before insert ON users   
    2. FOR EACH ROW   
    3. BEGIN   
    4. set New.homeLocationX = 128;  
    5. set New.homeLocationY = 128;  
    6. set New.homeLocationZ=30;   
    7. END  

     

    大写的为关键字

     

    trigger_name:触发器的名字,我常用的命名规则t_name_tableName_(b|a)(i|u|d),t:MySQL触发器标识,name:英文名,tableName:表名,b(BEFORE):标识是触发事件之前,a(AFTER):标识触发事件之后,i(insert):标识insert事件,u(update):标识update事件,d(delete):标识delete事件;

     

    trigger_time:触发时间(BEFORE或AFTER)

     

    trigger_event:事件名(insert或update或delete)

     

    tbl_name:表名(必须是永久性表)

     

    trigger_stmt:执行语句(可以是复合语名),使用别名OLD和NEW,能够引用与触发程序相关的表中的列。

     

    2、删除解发器

    语法:

    1. DROP TRIGGER [schema_name.]trigger_name;  

     

    注意:以上操作均需SUPER权限

     

    示例:

    1. DROP TRIGGER t_wiley_hotelComment_bu;   
    2. delimiter //   
    3. CREATE TRIGGER t_wiley_hotelComment_bu BEFORE UPDATE ON hotel_comment   
    4. FOR EACH ROW   
    5. BEGIN   
    6. IF OLD.ispass=0 && NEW.ispass=1 THEN   
    7. UPDATE hotel_info SET sumcommentsumcomment=sumcomment+1,

       

      sumconsumesumconsume=sumconsume+NEW.consume,sumservicesumservice=sumservice+NEW.service, 

       

      sumroomsumroom=sumroom+NEW.room,sumentironsumentiron=sumentiron+NEW.entironment,

       

      totaltotal=total+(NEW.service+NEW.room+NEW.entironment) WHERE hotel_id=NEW.hotel_id;   
    8. ELSEIF OLD.ispass=1 && NEW.ispass=0 THEN   
    9. UPDATE hotel_info SET sumcommentsumcomment=sumcomment-1,

       

      sumconsumesumconsume=sumconsume-NEW.consume,sumservicesumservice=sumservice-NEW.service, 

       

      sumroomsumroom=sumroom-NEW.room,sumentironsumentiron=sumentiron-NEW.entironment,

       

      totaltotal=total-(NEW.service+NEW.room+NEW.entironment) WHERE hotel_id=NEW.hotel_id;   
    10. END IF;   
    11. END;//   
    12. delimiter ;  

     

    以上的相关内容就是对MySQL触发器的使用的介绍,望你能有所收获。

    展开全文
  • 本文纯属个人见解,是对前面学习的总结,如有描述正确的地方还请高手指正~ 一、触发器概述 1、SQL Server供提两种类型的触发器:AFTER触发器和INSTEADOF触发器。 l AFTER触发器作用在表上,晚于约束处置。...
  • 摘要:以下的文章主要介绍的是MySQL触发器正确创建步骤,以及MySQL触发器的删除,以下就是具体内容的描述,希望在你今后的学习中会有所帮助。 标签:MySQL触发器 下面的文章主要描述的是MySQL触发器正确...
  • 【判断题】欲使D触发器Q输出端次状态为1,其D输入端应接高电平。【单选题】SS4G劈相机手动控制时,591QS置( )【判断题】花生、芝麻...正确的是:【单选题】SS4G劈相机故障时,将296QS置( )位【单选题】在 Python 中,用于...
  • 背景:项目使用mybatis框架,代码中有基于更新sql返回的更新条目数进行业务处理的逻辑,但是过程中遇到问题。...也就是说返回条目数表示的是更新sql和触发器整体执行成功的条目数,而非单独更新sql的成功条...
  • 本文内容包括:场景3:为数据流建立模型场景4:建立事件和触发器模型场景5:正确终止流程方法场景6:在分层流程模型中重用活动结束语致谢参考资料本文是本系列第二篇文章,该系列所描述的典型建模错误,是从几百...
  • 基础笔试题

    2016-08-27 21:25:47
    1、在MySQL中,下列关于触发机器的描述正确的是( )正确答案 :ACA MySQL的触发器只支持行级出发,不支持语句级触发B 触发器可以调用将数据返回客户端的存储程序C 在MySQL中,使用new和old引用触发器中发生的记录...
  • 【单选题】下列关于触发器描述中,正确的是。【填空题】_____________语句可将SQL语言查询结果储存到变量中。【填空题】查询成绩高于平均分的成绩记录。【填空题】查询选修了“高等数学”且成绩在80分以上的学生...
  • 联接查询

    2020-06-21 22:58:03
    2.下面关于触发器描述,错误的是()。 A 触发器是一种特殊的存储过程,用户可以直接调用 B 触发器表和DELETED表没有共同记录 C 触发器可以用来定义比CHECK约束更复杂的规则 D 删除触发器可以使用DROPTRIGGER...
  • 不幸的是,虽然关系型数据库历经了约30年的发展,有成熟的理论和大量的实践基础,但是,大多数设计、开发人员在设计数据库结构时仍然是“跟着感觉走”,根据业务的需要和编程的方便,把字段这张表放几个那张表放几个...
  • Mysql基础练习10题

    千次阅读 2020-05-20 23:51:29
    1.SELECT * FROM city limit 5,10描述正确的是( ) A.获取第6条到第10条记录 B.获取第5条到第10条记录 C.获取第6条到第15条记录 D.获取第5条到第15条记录 正确答案: C 2.触发器不会响应以下哪一语句而自动执行的...
  • 下图所示UML图为 类图 有关该图的描述正确的是 如果B的一个实例被删除,则包含A 的实例都被删除 知识点: 用况图(用例) 用例图,展现了一组用例、参与者(actor)以及它们之间的关系。 用例图从用户.
  • 3.7.2 模式结构的正确命名 53 3.7.3 ER概念设计设计选择 54 3.7.4 ER图候选表示法 55 3.8 其他表示法示例:UML类图 55 3.9 高于2度联系类型 57 3.9.1 对二元和三元(或高度)联系选择 ...
  • 不深入学习MYSQL

    千次阅读 2020-02-28 14:48:37
    本文是针对数据库的事务与锁,触发器,存储...若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性,(注意事项:首先,数据库类型要是InnoDB,其次,加锁必须跟事务同时使用)。 事务的四个...
  • 如何设置Windows10定时重启?

    千次阅读 2020-03-16 16:49:23
    3、填写任务名称和必要的描述,方便后期查看 4、设置触发器(即:任务何时开始) 5、设置开始时间、时间间隔 6、选择该任务执行什么操作 7、填写脚本命令和参数 8、确认设置内容是否正确,如若无误...
  • 通常watermark是用于处理乱序事件的,而正确的处理乱序事件,通常用watermark机制结合window来实现。 我们知道,流处理从事件产生,到流经source,再到operator,中间是有一个过程和时间的。虽然大部分情况下,流到...
  • CruiseYoung提供带有详细书签电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 特别说明:该版本是目前网络上最全版本:修正了所有缺页和错页问题。 Oracle Database 11g完全参考手册 ...
  • plsqlplus+instantclient_11_2

    2018-01-31 10:17:42
    如果所有测试是正确的,它还可以快速确定下来。若有错误,测试管理器会启动调试器来确认错误原因。 To-Do项目 你可以使用任何SQL或PL/SQL源文件的To-Do项目来快速的做一个关于源文件的注解。后面你可以从To-Do清单...
  • PLSQLDeveloper_解压版

    2018-01-31 09:59:01
    如果所有测试是正确的,它还可以快速确定下来。若有错误,测试管理器会启动调试器来确认错误原因。 To-Do项目 你可以使用任何SQL或PL/SQL源文件的To-Do项目来快速的做一个关于源文件的注解。后面你可以从To-Do清单...
  •  本书讨论的是使用表而不是过程式代码的各种SQL编程技术。我一直跟大家说,学习SQL编程最重要的就是要摒弃原有的过程式编程,但对于那些一直都在以文件和过程代码的方式来思考的人们而言,仅仅这样说不行,还得具体...
  • java面试宝典

    2013-02-28 16:04:01
    27、描述一下JVM 加载class 文件原理机制? 10 28、char 型变量中能不能存贮一个中文汉字?为什么? 10 29、abstract class 和interface 有什么区别? 10 30、Static Nested Class 和Inner Class 不同? 11 31、java...
  • 千方百计笔试题大全

    2011-11-30 21:58:33
    27、描述一下JVM 加载class 文件原理机制? 10 28、char 型变量中能不能存贮一个中文汉字?为什么? 10 29、abstract class 和interface 有什么区别? 10 30、Static Nested Class 和Inner Class 不同? 11 31、java...

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

触发器描述正确的是