美文网首页
MySQL触发器

MySQL触发器

作者: 吱吱_呀 | 来源:发表于2022-03-14 18:13 被阅读0次

    mysql语句在被需要时执行,存储过程也是。但如果需要某些语句在事件发生时自动执行,怎么办?比如每当订购一个产品时,都从库存数量中减去订购数量。这就需要触发器---在某个表发生更改时自动执行---是mysql响应Delete、Insert、Update语句时自动执行的一条SQL语句(或位于Begin和Ended之间的一组语句)。其他语句不支持触发器。

    创建触发器 TRIGGER

    Create  Trigger  触发器名称 触发时间  触发事件 On  关联表  For Each Row  触发过程体;

    触发器名称保证唯一

    触发时间取值为BEFORE或AFTER

    触发事件取值Delete /Insert /Update

    关联表必须是永久表,不能是视图或者临时表

    触发过程体可以是一条SQL语句或位于Begin和Ended之间的一组语句

    看一个简单示例

    create trigger 创建一个名为newproduct的触发器。此触发器在insert语句执行成功后执行。文本 product added  将对每个插入的行显示一次。

    触发器按每个表每个事件每次地定义,一次每个表最多支持六个触发器,每条INSERT、UPDATE和DELETE 的之前和之后。

    删除触发器

    DROP TRIGGER 触发器名;

    使用触发器

    INSERT 触发器在insert 语句执行之前或者之后执行。

    在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行,即代表insert语句的最新记录;

    在BEFORE INSERT触发器中,NEW中的值也可以被更新(允许更改被插入的值)

    看个例子

    创建了一个名为INS的触发器,在向student表插入数据之后执行,自动在grade表中生成对应的数据。创建成功后,向student表插入数据,触发器不能直接返回结果,所以我们查看一下grade表。

    通常,将BEFORE用于数据验证和净化(目的是保证插入表中的数据确实是需要的数据)。

    DELETE触发器在DELETE语句执行之前或之后执行。

    在DELETE触发器代码内,可以引用一个名为OLD的虚拟表,访问被删除的行;

    OLD中的值全都是只读的,不能更新。

    看个例子

    创建一个名为deleteorder 的触发器,在任意订单被删除前执行此触发器,将被删除的值保存到archive备份表中。

    使用BEFORE DELETE触发器的优点(相对于AFTER DELETE触发器来说)为,如果由于某种原因,订单不能存档,DELETE本身将被放弃。

    UPDATE触发器在UPDATE语句执行之前或之后执行。

    在UPDATE触发器代码中,可以引用一个名为OLD的虚拟表访问UPDATE语句以前的值,引用一个名为NEW的虚拟表访问新更新的值;

    在BEFORE UPDATE触发器中,NEW中的值可能也被更新(允许更改将要用于UPDATE语句中的值);

    OLD中的值全都是只读的,不能更新。

    查看触发器

    查看当前数据库左右触发器

    SHOW Triggers \G;

    查看当前数据库某个触发器

    SHOW Create Trigger  触发器名;

    相关文章

      网友评论

          本文标题:MySQL触发器

          本文链接:https://www.haomeiwen.com/subject/tdfhdrtx.html