触发器和存储过程是为了提高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调用相关推荐

  1. java mysql物联网土壤智能监控web前端+java后台+数据接程序

    博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 java mysql物联网土壤智能监控web前端+java后台+数据接程序 视频效 ...

  2. mysql触发器和存储过程_MySql的存储过程和触发器

    Mysql的存储过程是类似于其它编程语言中的函数的功能,存储过程内部可以使用顺序循环和转移三种基本程序结构,而且整个存储过程可以接受和返回参数. 创建存储过程(procedure)时,因为其内部有以; ...

  3. mysql在触发器中调用存储过程_mysql 触发器中调用存储过程

    想要在MYSQL的触发器中调用存储过程,但是IDE提示: 0A000 Not allowed to return a result set from a trigger 触发器代码如下: DELIMI ...

  4. mysql exec函数_mysql exec 存储过程

    MySql存储过程 create proc 名称 参数列表 as 代码段 exec 存储过程名称 参数列表 要点: 1.可以使用output修饰参数 2.可以使用默认值,注意需要将最后的参数设置成默认 ...

  5. 多字段mysql触发器实例_mysql触发器原理与用法实例分析

    本文实例讲述了mysql触发器原理与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是触发器 创建触发器 单条触发器语句 多条触发器语句 查看触发器 删除触发器 触发器的新旧记录引用 首发日期 ...

  6. mysql触发器弊端_MySQL触发器的作用及弊端

    前言: 触发器只是用在特定的场合,一般情况下,我们还是在代码中处理,因为同一个业务逻辑中,如果代码和sql中都有业务逻辑,那么后期维护将很麻烦,所以要根据实际情况来选择,看是否合适.触发器就是写在数据 ...

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

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

  8. mysql过程异常处理_mysql数据库存储过程异常处理

    14.1.4  定义条件和处理程序 定义条件和处理程序是事先定义程序执行过程中可能遇到的问题.并且可以在处理程序中定义解决这些问题的办法.这种方式可以提前预测可能出现的问题, 并提出解决办法.这样可以 ...

  9. mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)

    MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来 触发器:某个表发生更改时自动处理.触发器是MySQL响应delete,ins ...

最新文章

  1. 思维dp ---- Codeforces Round #142 (Div. 1) D. Towers
  2. Ispur服务器收集系统日志,centos 7.2往rsyslog服务器端发送系统日志
  3. HTML布局篇之双飞翼(圣杯)布局
  4. 2018-2019 网络对抗技术 20165231 Exp5 MSF基础应用
  5. Spring EL方法调用实例
  6. 又收集了一个字体图标站
  7. 2019递归实现字符串的逆序存储(C++)
  8. devops失败的原因_为什么害怕失败是一种无声的DevOps病毒
  9. python lambda表达式及用法_python lambda表达式简单用法
  10. 心理与行为科学统计_华东师范大学心理学考研备考经验分享
  11. MongoDB 数据库管理(不定时更新)
  12. 怎样在 linux 系统下增加一块硬盘
  13. mysql 子查询怎么写_MySQL中两种子查询的写法
  14. 独立开发仿造一个智能窗帘机器人
  15. 亲历的商务谈判过程(续)——谈谈国企和我的经历
  16. JSON和list之间的转换
  17. L2正则化—tensorflow实现
  18. 南京廖华里mysql测试题1答案_MySQL数据库考试试题及答案
  19. DTAS-电机机壳与端盖止口垂直度对电机气隙影响
  20. 微信授权-官方案例 ios版

热门文章

  1. 调一调Hive on Spark参数,毫不夸张的说,使其性能达到最大化!
  2. mysql存储引擎简介
  3. How to Set up SSH Tunneling (Port Forwarding)?
  4. 算法设计与分析【第七周】贪心算法 最优装载问题
  5. PAT1057 数零壹 (20 分)
  6. 深入理解Memory Order
  7. 容器源码分析之Stack(四)
  8. 使用RNN解决NLP中序列标注问题的通用优化思路
  9. Leecode31. 下一个排列——Leecode大厂热题100道系列
  10. 1058 A+B in Hogwarts (20 分)_7行代码AC