触发器与存储过程笔记
触发器:在数据库记录发生新增、修改、删除前后触发
如何:合同中,金额=单价*数量
利用触发器实现,先拿到提交数据中的单价和数量,获取数据库表中的金额字段,将数量*单价的结果刚入到金额字段,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
触发器与存储过程笔记相关推荐
- MySQL学习笔记 05、触发器、存储过程、存储函数、定时任务
文章目录 前言 一.触发器 提前准备测试表 1.1.创建触发器 1.2.删除触发器 二.存储过程 2.1.认识变量 2.1.1.系统变量 2.1.2.用户变量 2.2.存储过程创建 2.3.删除存储过 ...
- MySQL(学习笔记)——数据库视图、触发器及存储过程
数据库视图.触发器及存储过程 1.什么是视图 定义:视图是从数据库中一个或多个表中导出来的虚拟表,不在内存中. 语法: create view 视图名 //(创建一张视图) as sele ...
- 【数据库】视图,触发器,存储过程
数据库笔记 day04 2019/8/23 周五 学习内容:视图,触发器,存储过程,变量,if else语句,范式 关键字:create view:describe:select:drop:delim ...
- Oracle 触发器调用存储过程|转||待研究|
Oracle触发器调用存储过程资料收集整理 触发器:Trigger 存储过程:Stored Procedure // ******************** 收集1 **************** ...
- mysql触发器 存储过程_mysql触发器和存储过程
Mysql触发器和存储过程 1 / 9Mysql触发器 1.语法:命名规则 CREATE TRIGGER { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ...
- Oracle12c与Oracle11g采用触发器与存储过程实现同步更新(代码+图解)
一.保证两台笔记本网络互通 关于连接,详情见之前写的:WIFI网络,两台笔记本互联Oracle,一台是11g,一台是12c 现在测试的ip地址: A: 10.65.252.84 B: 10.82.15 ...
- 关于mysql触发器和存储过程的理解
内容源自:一篇很棒的 MySQL 触发器学习教程 一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊 ...
- oracle删除所有触发器的命令,Oracle删除当前用户的所有对象(表、视图、触发器、存储过程、函数)...
Oracle删除当前用户的所有对象(表.视图.触发器.存储过程.函数) 1. DECLARE TYPE name_list IS TABLE OF VARCHAR2(40); TYPE type_li ...
- 序列、触发器和存储过程三者之间有啥关系
序列.触发器和存储过程三者之间有啥关系? 好久没用oracle数据库了,今天复习了下oracle的序列.触发器和存储过程,之前对触发器和存储过程的概念有点模糊,今天来理理复习心得:存储过程相当于打包好 ...
最新文章
- FFmpeg中拉取rtsp视频流并缩放显示测试代码
- Elasticsearch设置最大返回条数
- PacketTracer 5.2基于AAA的Easy ×××实验
- vue .native 方法未定义_vue最新面试题
- Python连接Mysql数据库入门
- JS基础入门篇(二十)—事件对象以及案例(二)
- JAVA读写之前,先进行一下可读,可写权限判断
- java调用lingo实例_LINGO使用教程(一)
- Protel 99 SE 的坑
- java 8 64_java8离线安装包64位
- 车联网仿真测试解决方案
- 常用的网络上的 webservice 地址
- 双击div变成可编辑区的简单实现
- c-lodop打印网页内容
- elementUI 日 周 月 季 年 时间选择控件封装
- 如何在windows上下载安装zeplin
- 苹果计算机使用方法,不知道这10个Mac使用技巧,别说你会用苹果电脑
- 秦汉考场科目三路线图_秦汉科目三考场考试攻略,附考场路线图
- 加速计算,加速智慧未来
- mac系统装mysql还是mariadb_Mac安装MariaDB数据库