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的任何操作了(包括增删改)。

转载于:https://www.cnblogs.com/weiyinfu/p/5430839.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值