美文网首页MySQL
MySQL——使用触发器(十八)

MySQL——使用触发器(十八)

作者: 开心糖果的夏天 | 来源:发表于2017-06-29 21:25 被阅读73次

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

    MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

    MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

    一、触发器

    触发器是MySQL响应以下任意语句而自动执行的一条SELECT语句(或位于BEGIN和END语句之间的一组语句):
    DELETE;
    INSERT;
    UPDATE。
    其他MySQL语句不支持触发器。

    二、创建触发器

    在创建触发器时需要给出以下4条信息:
    (1)唯一的触发器名;
    (2)触发器关联的表;
    (3)触发器应该相应的活动(DELETE、INSERT或UPDATE);
    (4)触发器何时执行(处理之前或之后)。
    触发器用CREATE TRIGGER语句创建。示例如下:

    CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT 'Product added';
    

    CREATE TRIGGER 用来创建名为newproduct的新触发器。触发器可在一个操作发生之前或之后执行,这里给出了AFTER INSERT,所以此触发器将在 INSERT语句成功执行后执行。这个触发器还指定FOR EACH ROW,因此代码对每个插入行执行。在这个例子中,文本Product added将对每个插入的行显示一次。

    三、删除触发器

    DROP TRIGGER newproduct;
    

    触发器不能更新或覆盖。为了修改一个触发器,必须先删除它,然后再重新创建。

    四、使用触发器

    1.INSERT触发器

    INSERT触发器在INSERT语句执行之前或之后执行。需要知道以下几点:
    (1)在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行;
    (2)在BEFORE INSERT触发器中,NEW中的值也可以被更新(允许更改被插入的值);
    (3)对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成值。

    CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW SELECT NEW.order_num;
    

    在插入一个新订单到orders表时,MySQL生成一个新订单号并保存在order_num中。触发器从NEW.order_num取得这个值并返回它。
    为测试这个触发器,试着插入一下新行,示例如下:

    INSERT INTO orders(order_date,cust_id) VALUES (Now(),10001);
    

    2.DELETE触发器

    DELETE触发器在DELETE语句执行之前或之后执行。需要知道以下两点:
    (1)在DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行;
    (2)OLD中的值全都是只读的,不能更新。
    下面的例子演示使用OLD保存将要被删除的行到一个存档表中:

    CREATE TRIGGER deleteorder BEFORE DELETE ON orders FOR EACH ROW
    BEGIN
          INSERT INTO archive_orders(order_num,order_date,cust_id)
          VALUES(OLD.order_num,OLD.order_date,OLD.cust_id);
    END;
    

    3.UPDATE触发器

    UPDATE触发器在UPDATE语句执行之前或之后执行。需要知道以下几点:
    (1)在UPDATE触发器代码中,可以引用一个名为OLD的虚拟表访问以前(UPDATE语句前)的值,引用一个名为NEW的虚拟表访问新更新的值。
    (2)在 BEFORE UPDATE触发器中,NEW中的值可能也被更新(允许更改将要用于UPDATE语句中的值);
    (3)OLD中的值全都是只读的,不能更新。下面的例子保证州名缩写总是大写(不管UPDATE语句中给出的是大写还是小写):

    CREATE TRIGGER updatevendor BEFORE UPDATE ON vendors FOR EACH ROW SET NEW.vend_state=Upper(NEW.vend_state);
    

    相关文章

      网友评论

        本文标题:MySQL——使用触发器(十八)

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