zoukankan      html  css  js  c++  java
  • mysql 开发基础系列19 触发器

      触发器是与表有关的数据库对象,触发器只能是针对创建的永久表,而不能是临时表。

    1.1 创建触发器

     -- 语法:
    CREATE TRIGGER trigger_name trigger_time trigger_event
    ON tbl_name FOR EACH ROW trigger_stmt

      trigger_time:是触发器的触发时间,可以是 before或after, before是检查约束前触发,而after是检查约束后触发。
      trigger_event:是触发器的触发事件,可以是 insert,update,delete。
      同一个表相同的触发时间的相同触发事件,只能定义一个触发器。使用别名old和new 来引用触发器中发生变化的记录内容。

    --  先查看city_memory数据(触发前查看表数据)
    SELECT * FROM city_memory;

    -- 创建city表的insert 触发器 使用AFTER触发时间
    DELIMITER $$
    CREATE TRIGGER  tri_city
     AFTER INSERT ON city FOR EACH ROW BEGIN
    INSERT INTO city_memory (country_id, cityname, Citycode)
    VALUES (new.country_id, new.cityname, new.Citycode);     
    END;
    $$
    DELIMITER ;
    
    -- 插入city表数据,触发city表插入触发器
    INSERT INTO  city(country_id, cityname, Citycode) VALUES(2,'中国触发','001触发');
    -- 再次查看SELECT * FROM city_memory; 如下图所示:

      下面是city表数据:

    2. 查看触发器

    -- 使用information_schema.triggers来查看
    SELECT * FROM information_schema.triggers WHERE trigger_name = 'tri_city'

    3. 删除触发器

    DROP TRIGGER tri_city;

     总结:触发器的限制:

    (1)触发程序不能调用将数据返回客户端的存储程序。

    (2)不能在触发器中使用以显式或隐式方式开始或结束事务的语句。

    编写过于复杂的触发器或者增加过多的触发器对记录的插入、更新、删除操作肯定会有比较严重的影响。不要将应用的处理逻辑过多的依赖于触发器来处理。

  • 相关阅读:
    complete完成量——实例分析
    worker线程的创建与使用
    SDIO接口
    Linux中V4L2分析
    Linux系统调用分析
    ppm图片显示
    应用层与内核层错误打印函数总结
    高通Sensor驱动学习笔记
    linux中新增一个shell命令的方法
    RTC测试程序
  • 原文地址:https://www.cnblogs.com/MrHSR/p/9297960.html
Copyright © 2011-2022 走看看