mysql触发器

触发器可以让你在插入,更新、删除前后触发相应的事件
优点:触发器可以捕获业务逻辑中的错误,可以检查数据完整性,在执行命令前执行一些特定的操作,这个操作可以是逻辑语句,也可以是mysql语句
缺点:触发器不可见,它捕获的异常没那么容易想到是触发器的发出的,通常需要自定义异常,触发器越多或者越复杂,查看起来就越混越迷
作用:执行特定操作如一个表修改另一个表也要修改,和检查数据是否合格等
语法:

CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件  #触发事件指:insert(有new) update(有new,old) delete(有old)
ON 表名 FOR EACH ROW
BEGIN
    执行语句列表,可以存在多条sql语句,或逻辑语句
END

引入:delimiter #分隔符,原来mysql是以;作为结尾标志的,而delimiter可以修改结尾标志 ,一般改为$

创建触发器:假如插入一条学生记录,在插入之前判断sex性别是否是男或者女

mysql> delimiter $
#这里触发器命名我喜欢用这么长,一来可以知道是那个表,他是一个触发器,并在插入前执行
mysql> create trigger stu_trigger_before_insert before insert
    -> on stu for each row
    -> begin
    -> if new.sex!='男' && new.sex!='女'     #这里是插入有new方法
    -> then
    -> signal sqlstate 'HY000' set message_text='sex error';
    #上面HY000指的是服务器类型错误,不一定非要用它,只是借用这个抛出自己提示的错误,也可以使用XT000等其他类型错误**
    -> end if;
    -> end;
    -> $
Query OK, 0 rows affected (0.01 sec)

mysql> insert into stu values(1,‘lyf’,18,‘中性’);

ERROR 1644 (HY000): sex error
插入不合规格的就会报错,有时报错会乱码,因为服务器错误,所以你字符集没有设置为utf8,这里建议创建数据库的时候就设置

查看所有触发器
mysql> show triggers \G;
加上\G更方便查看当然你可以指定某个数据库中的触发器,

因为触发器都存在information_schema中,所以可以这么查看
mysql> select * from information_schema.triggers;

这样查询,自然可以使用where进行指定或者like模糊查询咯

删除触发器
mysql> drop trigger stu_trigger_before_insert;

注意:MYSQL中触发器中不能对本表进行 insert ,update ,delete 操作,以免递归循环触发,产生死循环,所以他一般用作逻辑判断,和对其他表做增删改
并且触发器不能返回select结果集。

这里的这个我只利用空余时间回忆了下,但是对于注意点记不太清,尝试的时候也出现了死循环,还找不到原因,代码的话我只上了简单的逻辑判断,sql语句只要不写select查询其他的ok,唯一要注意的是new,和old的使用,注意哪些事件有new,哪些有old就好了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值