mysql中存储过程另存为_转: MySQL中的存储过程
转:
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中的存储过程相关推荐
- 在mybatis用mysql的代码块_关于Mybatis 中使用Mysql存储过程的方法
1.存储过程的简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用 ...
- mysql 存储过程临时表_在MySQL存储过程中创建的临时表的范围
问题撤销!当我拼写正确的一切,问题消失了! 我有一个MySQL存储过程创建一个临时表.当我从mysql提示符调用过程时,它似乎运行成功,但是如果我从临时表中选择COUNT(*),我会收到一个错误,表示 ...
- mysql 添加int列_在MySQL中现有的int列的值中添加字符?
要将字符添加到现有的int列值中,请使用MySQL CONCAT().让我们首先创建一个表-mysql> create table DemoTable ( Amount int ); 使用插入命 ...
- mysql against包含英文_在MySQL中使用MATCH和AGAINST选择特定列中包含字符串的行
让我们首先创建一个表-mysql> create table DemoTable1833 ( Name varchar(20) ); 修改表-Mysql> alter table Demo ...
- mysql shell 所有表_删除mysql数据库中所有表的shell脚本
分享一个可以删除mysql中所有表的shell脚本,代码如下: 复制代码 代码示例: #!/bin/bash # 删除mysql中所有表 # 示例: # Usage: ./script user pa ...
- mysql zerofill设置方法_在MySQL中使用ZEROFILL设置自定义自动增量
让我们首先创建一个表.这里.我们使用ZEROFILL和AUTO_INCREMENT设置了UserId列mysql> create table DemoTable1831 ( UserId int ...
- mysql 比较一个字符串_比较MySQL中的两个字符串?
为了比较两个数字字符串,让我们首先创建一个表.以下是查询-mysql> create table compareTwoStringsDemo -> ( -> Id int NOT N ...
- mysql 如何对表排序_学习MySQL:对表中的数据进行排序和过滤
mysql 如何对表排序 In this article, we will learn how we can sort and filter data using the WHERE clause a ...
- mysql重复添加计数_从MySQL中的单个列获取重复值的计数?
让我们首先创建一个表-mysql> create table DemoTable -> ( -> Number int -> ); 使用插入命令在表中插入一些记录-mysql& ...
- mysql怎么子查询_在mysql中如何进行子查询?
在mysql中,子查询是指将一个查询语句嵌套在另一个查询语句中,可以在SELECT.UPDATE和 DELETE语句中配合WHERE子句进行实现,WHERE子句中语法格式为"WHERE (另 ...
最新文章
- MyBatis-11MyBatis动态SQL之【if】
- linux历史性能数据,Linux平台下如何看OS历史的性能数据
- scp瓶中船是什么梗_早安打工人是什么梗?
- 波士顿动力又有新视频:机器狗要开门,人类真是拽不回来
- python半径为2.11的圆球的体积_python 学习笔记 11 -- 使用参数使你的程序变得更性感...
- Python 根据百度 API 获得经纬度,根据经纬度计算城市间距离
- 【读书笔记】暗时间~
- Mac如何解决vi vim光标移动慢问题
- 【翻译】PHP中 文字编码变换时 使用SJIS-win而非SJIS,使用eucJP-win而非EUC-JP
- XPS文件转换器Speedpdf——XPS转PDF免费工具
- 《离散数学》速成-练习题答案(含题目)
- 【STM32】电容触摸按键
- ThinkPHP高仿蓝奏云网盘系统源码/对接易支付系统程序
- 你所想要了解的美国人工智能专业
- STM32L431(CubeMX)使用DHT11读取环境温度与湿度并通过串口打印
- Cisco ❀ 二层交换安全技术
- 扫描子网中的地址+Pings模拟
- 通过配置环境变量解锁win+r新玩法
- 行列式的计算(c++)——公式法(5阶)和递推法(n阶)
- K12在线教育小班模式带动行业新动向
热门文章
- hbase java框架_Hadoop学习笔记—15.HBase框架学习(基础实践篇)
- tim计时器读出为0_高中物理 必修1 (12) 第一章 运动的描述 课时4 实验:用打点计时器测速度(1)...
- 紫膜质-形态与意识的桥梁
- 计算氦原子的基态能级
- 测量分类准确率的过程算坍缩吗?
- maven 加入第三方库_maven加载第三方jar不能加载
- sysbench 压测 mysql_sysbench压测
- 在Linux中设置UMASK值
- 独立于三大FPGA平台采用modelsim仿真
- 【DIY】热水器升级加装远程wifi控制功能,esp8266远程红外控制热水器启动,稳定连续运行4天了,功能展示终稿...