java mysql 触发器 存储过程_mysql 触发器 存储过程 java调用
触发器和存储过程是为了提高SQL的运行效率。
SQL语句先编译、后执行,而触发器与存储过程都会提前预编译完成,且只编译一次,供反复调用。
随着时代的进步,硬件与带宽的提升,触发器和存储过程提升效率并不明显,所以在传统或并发量低的项目中已经很少用到了。
1.触发器
简单的作用示意:用于增删改的时候,表关联的连贯操作(具体根据需求的表设计定义)。以前会有人说可以用来做日志统计,现实开发中,其实很少有人用库表做日志。
创建:
CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW exesql
注释:
trigger_name 触发器名称
trigger_time 触发时间,值:BEFORE、AFTER
trigger_event 触发事件,值:INSERT、DELETE、UPDATE
tb_name 表名称,触发器建立在哪个表的基础上
exesql 触发器条件满足时,执行的sql或函数
列子:
DELIMITER $$drop trigger if existsms.trigger_test;create trigger ms.trigger_test after insert
on ms.master foreach rowbegin
INSERT INTO slave (s_id, s_content) VALUES(new.m_id,new.m_content);end$$
注:
DELIMITER $$ 定义结束符$$,意味SQL语句以$$结束,mysql默认;分号结束。
new表示记录更新后的值,更新前的值用old
该脚本不可以在视图工具Navicat或dbvisual里执行。
必须如图执行
2.存储过程
简单描述:存储过程是一个特定的SQL语句集,在数据库中只需编译一次,重复使用。一般项目不建议使用存储过程,维护麻烦。
优点:重复使用、减少网络流量、防止SQL注入(关键)
缺点:应用层程序员调试麻烦、可移植性低、可扩展性差
CREATE PROCEDURE PROCEDURE_NAME (PROCEDURE_MODE PARAM_NAME PARAM_TYPE) EXE_SQL
注释:
PROCEDURE_NAME 存储过程名字
PROCEDURE_MODE 存储过程类型,有IN、OUT、INOUT
PARAM_NAME 参数引用名称
PARAM_TYPE 参数类型(int、varchar、datetime等等)
EXE_SQL 执行sql语句
IN例子:
DELIMITER $$DROP PROCEDURE IF EXISTSms.in_procedure;CREATE PROCEDURE ms.in_procedure(IN param int)BEGIN
SELECTparam;SET param=3;SELECTparam;END$$SET @param=1;
CALL ms.in_procedure(@param);SELECT @param;
$$
注:
DELIMITER $$ 定义结束符$$,意味SQL语句以$$结束,mysql默认;分号结束。
该脚本不可以在视图工具Navicat或dbvisual里执行。
必须如图执行
OUT例子:
DELIMITER $$DROP PROCEDURE IF EXISTSms.out_procedure;CREATE PROCEDURE ms.out_procedure(OUT param int)BEGIN
SELECTparam;SET param=3;SELECTparam;END$$SET @param=1;
CALL ms.out_procedure(@param);SELECT @param;
$$
注:
DELIMITER $$ 定义结束符$$,意味SQL语句以$$结束,mysql默认;分号结束。
该脚本不可以在视图工具Navicat或dbvisual里执行。
必须如图执行
INOUT例子
DELIMITER $$DROP PROCEDURE IF EXISTSms.inout_procedure;CREATE PROCEDURE ms.inout_procedure(INOUT param int)BEGIN
SELECTparam;SET param=3;SELECTparam;END$$SET @param=1;
CALL ms.inout_procedure(@param);SELECT @param;
$$
注:
DELIMITER $$ 定义结束符$$,意味SQL语句以$$结束,mysql默认;分号结束。
该脚本不可以在视图工具Navicat或dbvisual里执行。
必须如图执行
3.java调用存储过程
packagecom.nginx.session.test;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.SQLException;importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.jdbc.core.CallableStatementCallback;importorg.springframework.jdbc.core.CallableStatementCreator;importorg.springframework.jdbc.core.JdbcTemplate;importorg.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTestpublic classJDBCTest {
@AutowiredprivateJdbcTemplate jdbcTemplate;
@Testpublic voidtest(){
Integer value= jdbcTemplate.execute(newCallableStatementCreator() {
@Overridepublic CallableStatement createCallableStatement(Connection con) throwsSQLException {
String storedProc= "{call ms.inout_procedure (?)}";
CallableStatement cs=con.prepareCall(storedProc);
cs.setInt(1,1);returncs;
}
},new CallableStatementCallback() {
@Overridepublic Integer doInCallableStatement(CallableStatement cs) throwsSQLException {
cs.execute();return cs.getInt(1);
}
});
System.out.println(value);
}
}
java mysql 触发器 存储过程_mysql 触发器 存储过程 java调用相关推荐
- java mysql物联网土壤智能监控web前端+java后台+数据接程序
博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 java mysql物联网土壤智能监控web前端+java后台+数据接程序 视频效 ...
- mysql触发器和存储过程_MySql的存储过程和触发器
Mysql的存储过程是类似于其它编程语言中的函数的功能,存储过程内部可以使用顺序循环和转移三种基本程序结构,而且整个存储过程可以接受和返回参数. 创建存储过程(procedure)时,因为其内部有以; ...
- mysql在触发器中调用存储过程_mysql 触发器中调用存储过程
想要在MYSQL的触发器中调用存储过程,但是IDE提示: 0A000 Not allowed to return a result set from a trigger 触发器代码如下: DELIMI ...
- mysql exec函数_mysql exec 存储过程
MySql存储过程 create proc 名称 参数列表 as 代码段 exec 存储过程名称 参数列表 要点: 1.可以使用output修饰参数 2.可以使用默认值,注意需要将最后的参数设置成默认 ...
- 多字段mysql触发器实例_mysql触发器原理与用法实例分析
本文实例讲述了mysql触发器原理与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是触发器 创建触发器 单条触发器语句 多条触发器语句 查看触发器 删除触发器 触发器的新旧记录引用 首发日期 ...
- mysql触发器弊端_MySQL触发器的作用及弊端
前言: 触发器只是用在特定的场合,一般情况下,我们还是在代码中处理,因为同一个业务逻辑中,如果代码和sql中都有业务逻辑,那么后期维护将很麻烦,所以要根据实际情况来选择,看是否合适.触发器就是写在数据 ...
- mysql触发器 存储过程_mysql触发器和存储过程
Mysql触发器和存储过程 1 / 9Mysql触发器 1.语法:命名规则 CREATE TRIGGER { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ...
- mysql过程异常处理_mysql数据库存储过程异常处理
14.1.4 定义条件和处理程序 定义条件和处理程序是事先定义程序执行过程中可能遇到的问题.并且可以在处理程序中定义解决这些问题的办法.这种方式可以提前预测可能出现的问题, 并提出解决办法.这样可以 ...
- mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)
MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来 触发器:某个表发生更改时自动处理.触发器是MySQL响应delete,ins ...
最新文章
- 思维dp ---- Codeforces Round #142 (Div. 1) D. Towers
- Ispur服务器收集系统日志,centos 7.2往rsyslog服务器端发送系统日志
- HTML布局篇之双飞翼(圣杯)布局
- 2018-2019 网络对抗技术 20165231 Exp5 MSF基础应用
- Spring EL方法调用实例
- 又收集了一个字体图标站
- 2019递归实现字符串的逆序存储(C++)
- devops失败的原因_为什么害怕失败是一种无声的DevOps病毒
- python lambda表达式及用法_python lambda表达式简单用法
- 心理与行为科学统计_华东师范大学心理学考研备考经验分享
- MongoDB 数据库管理(不定时更新)
- 怎样在 linux 系统下增加一块硬盘
- mysql 子查询怎么写_MySQL中两种子查询的写法
- 独立开发仿造一个智能窗帘机器人
- 亲历的商务谈判过程(续)——谈谈国企和我的经历
- JSON和list之间的转换
- L2正则化—tensorflow实现
- 南京廖华里mysql测试题1答案_MySQL数据库考试试题及答案
- DTAS-电机机壳与端盖止口垂直度对电机气隙影响
- 微信授权-官方案例 ios版
热门文章
- 调一调Hive on Spark参数,毫不夸张的说,使其性能达到最大化!
- mysql存储引擎简介
- How to Set up SSH Tunneling (Port Forwarding)?
- 算法设计与分析【第七周】贪心算法 最优装载问题
- PAT1057 数零壹 (20 分)
- 深入理解Memory Order
- 容器源码分析之Stack(四)
- 使用RNN解决NLP中序列标注问题的通用优化思路
- Leecode31. 下一个排列——Leecode大厂热题100道系列
- 1058 A+B in Hogwarts (20 分)_7行代码AC