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

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

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

触发器编写步骤:

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')

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

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

转载于:https://www.cnblogs.com/yolanda-lee/p/5493106.html

触发器与存储过程笔记相关推荐

  1. MySQL学习笔记 05、触发器、存储过程、存储函数、定时任务

    文章目录 前言 一.触发器 提前准备测试表 1.1.创建触发器 1.2.删除触发器 二.存储过程 2.1.认识变量 2.1.1.系统变量 2.1.2.用户变量 2.2.存储过程创建 2.3.删除存储过 ...

  2. MySQL(学习笔记)——数据库视图、触发器及存储过程

     数据库视图.触发器及存储过程  1.什么是视图   定义:视图是从数据库中一个或多个表中导出来的虚拟表,不在内存中.   语法: create view 视图名 //(创建一张视图) as sele ...

  3. 【数据库】视图,触发器,存储过程

    数据库笔记 day04 2019/8/23 周五 学习内容:视图,触发器,存储过程,变量,if else语句,范式 关键字:create view:describe:select:drop:delim ...

  4. Oracle 触发器调用存储过程|转||待研究|

    Oracle触发器调用存储过程资料收集整理 触发器:Trigger 存储过程:Stored Procedure // ******************** 收集1 **************** ...

  5. mysql触发器 存储过程_mysql触发器和存储过程

    Mysql触发器和存储过程 1 / 9Mysql触发器 1.语法:命名规则 CREATE TRIGGER { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ...

  6. Oracle12c与Oracle11g采用触发器与存储过程实现同步更新(代码+图解)

    一.保证两台笔记本网络互通 关于连接,详情见之前写的:WIFI网络,两台笔记本互联Oracle,一台是11g,一台是12c 现在测试的ip地址: A: 10.65.252.84 B: 10.82.15 ...

  7. 关于mysql触发器和存储过程的理解

    内容源自:一篇很棒的 MySQL 触发器学习教程 一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊 ...

  8. oracle删除所有触发器的命令,Oracle删除当前用户的所有对象(表、视图、触发器、存储过程、函数)...

    Oracle删除当前用户的所有对象(表.视图.触发器.存储过程.函数) 1. DECLARE TYPE name_list IS TABLE OF VARCHAR2(40); TYPE type_li ...

  9. 序列、触发器和存储过程三者之间有啥关系

    序列.触发器和存储过程三者之间有啥关系? 好久没用oracle数据库了,今天复习了下oracle的序列.触发器和存储过程,之前对触发器和存储过程的概念有点模糊,今天来理理复习心得:存储过程相当于打包好 ...

最新文章

  1. FFmpeg中拉取rtsp视频流并缩放显示测试代码
  2. Elasticsearch设置最大返回条数
  3. PacketTracer 5.2基于AAA的Easy ×××实验
  4. vue .native 方法未定义_vue最新面试题
  5. Python连接Mysql数据库入门
  6. JS基础入门篇(二十)—事件对象以及案例(二)
  7. JAVA读写之前,先进行一下可读,可写权限判断
  8. java调用lingo实例_LINGO使用教程(一)
  9. Protel 99 SE 的坑
  10. java 8 64_java8离线安装包64位
  11. 车联网仿真测试解决方案
  12. 常用的网络上的 webservice 地址
  13. 双击div变成可编辑区的简单实现
  14. c-lodop打印网页内容
  15. elementUI 日 周 月 季 年 时间选择控件封装
  16. 如何在windows上下载安装zeplin
  17. 苹果计算机使用方法,不知道这10个Mac使用技巧,别说你会用苹果电脑
  18. 秦汉考场科目三路线图_秦汉科目三考场考试攻略,附考场路线图
  19. 加速计算,加速智慧未来
  20. mac系统装mysql还是mariadb_Mac安装MariaDB数据库

热门文章

  1. Win10电脑开机界面设置个性签名?
  2. 如何从 Python 列表中删除重复项
  3. 计算当前时间对应的本周一、上周一
  4. 顺序队列之C++实现
  5. iOS-消除CocoaPods内容警告
  6. 定时将应用日志移动到指定目录
  7. 【ARM-Linux开发】【CUDA开发】【深度学习与神经网络】Jetson Tx2安装相关之二
  8. BC#65 T5 ZYB's Prime
  9. android获取屏幕尺寸、密度
  10. @RequestBody注解失效?从前端传来的数据到底需不需要@RequestBody注解?前端传输数据解析的问题?