zoukankan      html  css  js  c++  java
  • 触发器与存储过程笔记

    触发器:在数据库记录发生新增、修改、删除前后触发

    如何:合同中,金额=单价*数量

    利用触发器实现,先拿到提交数据中的单价和数量,获取数据库表中的金额字段,将数量*单价的结果刚入到金额字段,newold前缀就能访问其数据。触发器处理完成,提交,数据被写入到数据库表中。(类似拦截器)

    触发器编写步骤:

    create trigger 触发器名称

    触发时机(before/after) 触发条件(insert/update/delete)

    on 数据库表/视图/用户模式/数据库(操作的数据库表、视图等)

    for each row(行级触发器)

    begin 

      触发器主体功能

    end

    触发器例子一:删除合同记录前先删除这条合同里的货物记录

    create trigger tri_delete

    before delete

    on 'jkdb'.'contract_c'

    for each row

    begin 

      delete from contract_product_c where contract_id = old.contract_id

    end

    触发器例子二:记录对dept表的操作记录日志

    create or replace trigger tri_dept

    before insert or update or delete

    on dept

    declare 

       var_tag varchar2(10);                //声明变量,存储对dept表执行的操作类型

    begin

      if inserting then                    //当前触发的事件是insert时

        var_tag := '插入';                  //标识插入操作

      elsif updating then

        var_tag :='修改';

      elsif deleting then

        var_tag :='删除';

      end if;

      insert into dept_log values(var_tag,sysdate);      //向日志表中插入对dept表的操作信息

    end

    end tri_dept;

    使用触发器优点:速度极快,代码维护方便

    缺点:不能控制事务。

    存储过程:

    DELIMITER $$

    USE `jkdb`$$

    DROP PROCEDURE IF EXISTS `sp_del_contract`$$

    /*IN输入参数标识*/

    CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_del_contract`(IN p_contract_id VARCHAR(40))

    BEGIN

    /*删除指定货物下的附件信息*/

    DELETE FROM ext_cproduct_c WHERE contract_product_id IN (SELECT contract_product_id FROM contract_product_c WHERE contract_id=p_contract_id);

    /*删除指定合同下的货物信息*/

    DELETE FROM contract_product_c WHERE contract_id=p_contract_id;

    /*删除指定的合同*/

    DELETE FROM contract_c WHERE contract_id=p_contract_id; 

    COMMIT;

    END$$

    DELIMITER ;

    MyBatis调用存储过程:(基于Mysql数据库)

     数据库查询调用

    CALL sp_del_contract('4028817a3357462e01336cc0877b0010')

    但是,无论是触发器还是存储过程,都有一个致命的缺点:依赖数据库底层

    所以,现今企业轻数据库应用,重程序应用,将大量代码都放在代码端。

  • 相关阅读:
    zookeeper常用命令
    linux查看日志相关命令
    第三十一期: VueRouter源码浅析 传统前端和多媒体前端
    第二十八期:模型,模块,组件,框架和架构
    星际2光速注卵
    星际心得
    英语词根研究和单词记忆
    星际2如何离线模式打电脑和rpg地图练操作
    星际研究
    第一篇帖子:不利用中间变量交换两个数字的小算法题
  • 原文地址:https://www.cnblogs.com/yolanda-lee/p/5493106.html
Copyright © 2011-2022 走看看