• mysql创建触发器


    触发器语句只有一句话

    可以省略begin和end

    CREATE trigger `do_praise` after insert on praise 
        for each row
        update post set praiseCount=praiseCount+1;
    

    关于delimiter

    在sql中,许多关键符号都没有强制要求,而是由用户指定,比如escape
    select 'we#' like 'we#%';-- escape '#';

    没有注释结果就是1,有注释结果就是0。比如要匹配包含‘%’的字符串,就要写成'%#%%' escape '#'。
    delimiter表示分隔符,默认为分号,也可以写成一个字符串:

    delimiter weidiao
    select 3weidiao
    select 4;
    select 5;
    

    上面这段代码就会报个错,说select 4和select 5之间缺少分隔符。
    综上可知,这种实现就是简单的字符串替换,相当于#define宏定义。

    触发器语句有多句话

    不能省略begin和end,end后面需要跟一个delimiter。在begin和end之间的必然是sql代码,sql代码的分隔符必然是分号而不是自定义的其他字符串。
    因为触发器
    那么这个delimiter是啥符号呢?是声明出来的,可以声明成一个字符串,比如
    delimiter ;;;;;;;
    可以声明成@#$%^&*等符号,也可以声明称其他任意字符串。在触发器之前,要声明一种delimiter,在触发器定义结束之后,也要定义一种delimiter(这是其实就相当于返回到‘;’作为分隔符的情况)

    delimiter @
    CREATE trigger `do_praise`  after insert on praise 
    for each row
    begin
        update post set praiseCount=praiseCount+1; 
    end @
    delimiter ;
    

    触发器六种类型

    (before+after)*(insert+delete+update)=6种情况
    使用workbench可以可视化创建触发器,可以集中注意力在触发器语句上

    触发器的安全性

    这三样东西

    • before触发器
    • 增删改语句
    • after触发器

    是一个事务,只要有一环出错,后面就不再执行;只要有一环出错,事务就会回滚,前面的操作就会失效。

    创建触发器的大忌

    不能产生回路,比如表1的插入触发表二的删除,表二的删除就不能再触发表1的任何操作了(包括增删改)。

  • 相关阅读:
    .NET组件控件实例编程系列——4.多列下拉框和鼠标相关组件
    仿查询分析器的C#计算器——2.记号对象
    .NET组件控件实例编程系列——1.开篇
    仿查询分析器的C#计算器——1.初步分析
    WCF续写. IIS托管
    NhibernateReview
    文件路径,文件名,扩展名 常用操作
    Resharper.alt+enter
    textFieldShouldReturn 键盘无法消失 无法return的问题
    NHibernate原生SQL查询
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/5430839.html
Copyright © 2020-2023  润新知