转:

https://www.cnblogs.com/chenpi/p/5136483.html

阅读目录

什么是存储过程

简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;

ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;

有哪些特性

有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;

函数的普遍特性:模块化,封装,代码复用;

速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;

创建一个简单的存储过程

存储过程proc_adder功能很简单,两个整型输入参数a和b,一个整型输出参数sum,功能就是计算输入参数a和b的结果,赋值给输出参数sum;

几点说明:

DELIMITER ;;:之前说过了,把默认的输入的结束符;替换成;;。

DEFINER:创建者;

-- ----------------------------

-- Procedure structure for `proc_adder`

-- ----------------------------

DROP PROCEDURE IF EXISTS `proc_adder`;

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_adder`(IN a int, IN b int, OUT sum int)

BEGIN

#Routine body goes here...

DECLARE c int;

if a is null then set a = 0;

end if;

if b is null then set b = 0;

end if;

set sum = a + b;

END

;;

DELIMITER ;

执行以上存储结果,验证是否正确,如下图,结果OK:

set @b=5;

call proc_adder(2,@b,@s);

select @s as sum;

存储过程中的控制语句

IF语句:

-- ----------------------------

-- Procedure structure for `proc_if`

-- ----------------------------

DROP PROCEDURE IF EXISTS `proc_if`;

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_if`(IN type int)

BEGIN

#Routine body goes here...

DECLARE c varchar(500);

IF type = 0 THEN

set c = 'param is 0';

ELSEIF type = 1 THEN

set c = 'param is 1';

ELSE

set c = 'param is others, not 0 or 1';

END IF;

select c;

END

;;

DELIMITER ;

CASE语句:

-- ----------------------------

-- Procedure structure for `proc_case`

-- ----------------------------

DROP PROCEDURE IF EXISTS `proc_case`;

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_case`(IN type int)

BEGIN

#Routine body goes here...

DECLARE c varchar(500);

CASE type

WHEN 0 THEN

set c = 'param is 0';

WHEN 1 THEN

set c = 'param is 1';

ELSE

set c = 'param is others, not 0 or 1';

END CASE;

select c;

END

;;

DELIMITER ;

循环while语句:

-- ----------------------------

-- Procedure structure for `proc_while`

-- ----------------------------

DROP PROCEDURE IF EXISTS `proc_while`;

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_while`(IN n int)

BEGIN

#Routine body goes here...

DECLARE i int;

DECLARE s int;

SET i = 0;

SET s = 0;

WHILE i <= n DO

set s = s + i;

set i = i + 1;

END WHILE;

SELECT s;

END

;;

DELIMITER ;

其它:略~

存储过程弊端

不同数据库,语法差别很大,移植困难,换了数据库,需要重新编写;

不好管理,把过多业务逻辑写在存储过程不好维护,不利于分层管理,容易混乱,一般存储过程适用于个别对性能要求较高的业务,其它的必要性不是很大;

...

mysql中存储过程另存为_转: MySQL中的存储过程相关推荐

  1. 在mybatis用mysql的代码块_关于Mybatis 中使用Mysql存储过程的方法

    1.存储过程的简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用 ...

  2. mysql 存储过程临时表_在MySQL存储过程中创建的临时表的范围

    问题撤销!当我拼写正确的一切,问题消失了! 我有一个MySQL存储过程创建一个临时表.当我从mysql提示符调用过程时,它似乎运行成功,但是如果我从临时表中选择COUNT(*),我会收到一个错误,表示 ...

  3. mysql 添加int列_在MySQL中现有的int列的值中添加字符?

    要将字符添加到现有的int列值中,请使用MySQL CONCAT().让我们首先创建一个表-mysql> create table DemoTable ( Amount int ); 使用插入命 ...

  4. mysql against包含英文_在MySQL中使用MATCH和AGAINST选择特定列中包含字符串的行

    让我们首先创建一个表-mysql> create table DemoTable1833 ( Name varchar(20) ); 修改表-Mysql> alter table Demo ...

  5. mysql shell 所有表_删除mysql数据库中所有表的shell脚本

    分享一个可以删除mysql中所有表的shell脚本,代码如下: 复制代码 代码示例: #!/bin/bash # 删除mysql中所有表 # 示例: # Usage: ./script user pa ...

  6. mysql zerofill设置方法_在MySQL中使用ZEROFILL设置自定义自动增量

    让我们首先创建一个表.这里.我们使用ZEROFILL和AUTO_INCREMENT设置了UserId列mysql> create table DemoTable1831 ( UserId int ...

  7. mysql 比较一个字符串_比较MySQL中的两个字符串?

    为了比较两个数字字符串,让我们首先创建一个表.以下是查询-mysql> create table compareTwoStringsDemo -> ( -> Id int NOT N ...

  8. mysql 如何对表排序_学习MySQL:对表中的数据进行排序和过滤

    mysql 如何对表排序 In this article, we will learn how we can sort and filter data using the WHERE clause a ...

  9. mysql重复添加计数_从MySQL中的单个列获取重复值的计数?

    让我们首先创建一个表-mysql> create table DemoTable -> ( -> Number int -> ); 使用插入命令在表中插入一些记录-mysql& ...

  10. mysql怎么子查询_在mysql中如何进行子查询?

    在mysql中,子查询是指将一个查询语句嵌套在另一个查询语句中,可以在SELECT.UPDATE和 DELETE语句中配合WHERE子句进行实现,WHERE子句中语法格式为"WHERE (另 ...

最新文章

  1. MyBatis-11MyBatis动态SQL之【if】
  2. linux历史性能数据,Linux平台下如何看OS历史的性能数据
  3. scp瓶中船是什么梗_早安打工人是什么梗?
  4. 波士顿动力又有新视频:机器狗要开门,人类真是拽不回来
  5. python半径为2.11的圆球的体积_python 学习笔记 11 -- 使用参数使你的程序变得更性感...
  6. Python 根据百度 API 获得经纬度,根据经纬度计算城市间距离
  7. 【读书笔记】暗时间~
  8. Mac如何解决vi vim光标移动慢问题
  9. 【翻译】PHP中 文字编码变换时 使用SJIS-win而非SJIS,使用eucJP-win而非EUC-JP
  10. XPS文件转换器Speedpdf——XPS转PDF免费工具
  11. 《离散数学》速成-练习题答案(含题目)
  12. 【STM32】电容触摸按键
  13. ThinkPHP高仿蓝奏云网盘系统源码/对接易支付系统程序
  14. 你所想要了解的美国人工智能专业
  15. STM32L431(CubeMX)使用DHT11读取环境温度与湿度并通过串口打印
  16. Cisco ❀ 二层交换安全技术
  17. 扫描子网中的地址+Pings模拟
  18. 通过配置环境变量解锁win+r新玩法
  19. 行列式的计算(c++)——公式法(5阶)和递推法(n阶)
  20. K12在线教育小班模式带动行业新动向

热门文章

  1. hbase java框架_Hadoop学习笔记—15.HBase框架学习(基础实践篇)
  2. tim计时器读出为0_高中物理 必修1 (12) 第一章 运动的描述 课时4 实验:用打点计时器测速度(1)...
  3. 紫膜质-形态与意识的桥梁
  4. 计算氦原子的基态能级
  5. 测量分类准确率的过程算坍缩吗?
  6. maven 加入第三方库_maven加载第三方jar不能加载
  7. sysbench 压测 mysql_sysbench压测
  8. 在Linux中设置UMASK值
  9. 独立于三大FPGA平台采用modelsim仿真
  10. 【DIY】热水器升级加装远程wifi控制功能,esp8266远程红外控制热水器启动,稳定连续运行4天了,功能展示终稿...