MySQL存储过程分支语句_mysql 高级语句--存储过程(PROCEDURE)
mysql 高级语句
一、存储过程
1.什么是存储过程:
就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能。
ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;
2.优势
有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;
函数的普遍特性:模块化,封装,代码复用;
速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;
3.样式
MySQL存储过程创建的格式:CREATE PROCEDURE过程名([过程参数[,...]])
[特性...]过程体
IN输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT输出参数:该值可在存储过程内部被改变,并可返回
INOUT输入输出参数:调用时指定,并且可被改变和返回
4.创建存储过程
3.1简单案例:
#创建简单的存储过程
DROP PROCEDURE IF EXISTS `proc_adder`;
DELIMITER // #定界符
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_adder`(IN a int, IN b int, OUT sum int) #传参数a,b输出sum
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 ;
set @b=5;
call proc_adder(2,@b,@s); #调用函数
select @s as sum;
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 ;
set @type=1;
call proc_if(@type);
2.case 语句
set @type=1;
call proc_if(@type);
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 ;
set @type=1;
call proc_if(@type);
3.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 ;
set @type=1;
call proc_if(@type);
二,存储过程操作
-- 查看所有的存储过程
show PROCEDURE status;
-- 查看特定数据库存储过程
show PROCEDURE status where db='test';
-- 用指定的登录名查看该用户创建的存储过程
show PROCEDURE status where definer='root@localhost'; -- @localhost为用户登录位置(本地登录)
-- 查看指定时间段创建存储过程
show PROCEDURE status where created between '2017-02-17 00:00:00'
and '2017-02-17 23:59:59';
用系统表mysql.proc来查看:
-- 查看所有的存储过程信息
select * from mysql.proc;
-- 查看特定数据库里的存储过程
select * from mysql.proc where db='test';
-- 查看某个用户定义的存储过程
select * from mysql.proc where definer='root@localhost';
-- 查看某时间段创建的存储过程
select * from mysql.proc where created between '2017-02-17 00:00:00'
and '2017-02-17 23:59:59';
5.存储过程删除
删除一个存储过程比较简单,和删除表一样:
DROP PROCEDURE
三, MySQL存储过程的基本函数
(1).字符串类
CHARSET(str) //返回字串字符集
CONCAT (string2 [,... ]) //连接字串
INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0
LCASE (string2 ) //转换成小写
LEFT (string2 ,length ) //从string2中的左边起取length个字符
LENGTH (string ) //string长度
LOAD_FILE (file_name ) //从文件读取内容
LOCATE (substring , string [,start_position ] )同INSTR,但可指定开始位置
LPAD (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为length
LTRIM (string2 ) //去除前端空格
REPEAT (string2 ,count ) //重复count次
REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str
RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length
RTRIM (string2 ) //去除后端空格
STRCMP (string1 ,string2 ) //逐字符比较两字串大小,
SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符
,注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1
UCASE (string2 ) //转换成大写
RIGHT(string2,length) //取string2最后length个字符
SPACE(count) //生成count个空格
(2).数学类
ABS (number2 ) //绝对值
BIN (decimal_number ) //十进制转二进制
CEILING (number2 ) //向上取整
CONV(number2,from_base,to_base) //进制转换
FLOOR (number2 ) //向下取整
FORMAT (number,decimal_places ) //保留小数位数
HEX (DecimalNumber ) //转十六进制
注:HEX()中可传入字符串,则返回其ASC-11码,如HEX('DEF')返回4142143也可以传入十进制整数,返回其十六进制编码,如HEX(25)返回19
LEAST (number , number2 [,..]) //求最小值
MOD (numerator ,denominator ) //求余
POWER (number ,power ) //求指数
RAND([seed]) //随机数
ROUND (number [,decimals ]) //四舍五入,decimals为小数位数]
(3).日期时间类
ADDTIME (date2 ,time_interval ) //将time_interval加到date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区
CURRENT_DATE ( ) //当前日期
CURRENT_TIME ( ) //当前时间
CURRENT_TIMESTAMP ( ) //当前时间戳
DATE (datetime ) //返回datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间
DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间
DATEDIFF (date1 ,date2 ) //两个日期差
DAY (date ) //返回日期的天
DAYNAME (date ) //英文星期
DAYOFWEEK (date ) //星期(1-7) ,1为星期天
DAYOFYEAR (date ) //一年中的第几天
EXTRACT (interval_name FROM date ) //从date中提取日期的指定部分
MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串
MAKETIME (hour ,minute ,second ) //生成时间串
MONTHNAME (date ) //英文月份名
NOW ( ) //当前时间
SEC_TO_TIME (seconds ) //秒数转成时间
STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示
TIMEDIFF (datetime1 ,datetime2 ) //两个时间差
TIME_TO_SEC (time ) //时间转秒数]
WEEK (date_time [,start_of_week ]) //第几周
YEAR (datetime ) //年份
DAYOFMONTH(datetime) //月的第几天
HOUR(datetime) //小时
LAST_DAY(date) //date的月的最后日期
MICROSECOND(datetime) //微秒
MONTH(datetime) //月
MINUTE(datetime) //分返回符号,正负或0
SQRT(number2) //开平方
四,PHP对存储过程的调用
实例一:无参的存储过程
$conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!");
mysql_select_db('test',$conn);
$sql = "
create procedure myproce()
begin
INSERT INTO user (id, username, sex) VALUES (NULL, 's', '0');
end;
";
mysql_query($sql);//创建一个myproce的存储过程
$sql = "call test.myproce();";
mysql_query($sql);//调用myproce的存储过程,则数据库中将增加一条新记录。
实例二:使用变量的存储过程
$sql = "
create procedure myproce5(in a int,in b int)
begin
declare s int default 0;
set s=a+b;
select s;
end;
";
mysql_query($sql);//创建一个myproce5的存储过程
$sql = "call test.myproce5(4,6);";
mysql_query($sql);//调用myproce5的存储过程,在cmd下面看效果
一,mysql光标 储存
1.declare 声明光标
2.open 打开光标
3.fetch 获取光标记录,并赋值
4.close 关闭光标
例子:
MySQL存储过程分支语句_mysql 高级语句--存储过程(PROCEDURE)相关推荐
- mysql 5.7 循环语句_MySQL循环语句|mysql|loop|delimiter|procedure|调用_网易订阅
mysql常见的三种循环方式:while.repeat和loop循环.还有一种goto,不推荐使用. 1.while循环 -- 设置mysql分隔符为//,也就意味着,当遇到下一个//时,整体执行SQ ...
- mysql的各种语句_MySQL 常用语句大全
MySQL 常用语句大全 一.连接 MySQL 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 1.例 1:连接到本机上的 MYSQL. 首先在打开 DOS 窗口,然后进入目录 my ...
- mysql 存储过程 简书_MySQL学习之存储过程
一.存储过程 1-1.含义:一组预先编译好的SQL语句的集合,理解成批处理语句 1.提高代码的重用性 2.简化操作 3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 存储过程和函数:类 ...
- mysql命令书写顺序_MySQL SQL语句书写顺序和执行顺序
SQL语句书写顺序和执行顺序 (7) SELECT (8) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING (9 ...
- mysql set语句_MySQL Prepared语句简介
之前的MySQL版本4.1,查询以文本格式发送到MySQL服务器. 之后,MySQL服务器使用文本协议将数据返回给客户端.MySQL必须完全解析查询,并将结果集转换为字符串,然后再将其返回给客户端. ...
- mysql插入二进制命令_MySQL将语句写入到binlog二进制日志中
由于二进制日志是公共资源,所有线程都要写二进制日志,所以一定要避免两个线程同时更新二进制日志.因此,在事件组写二进制日志时,二进制日志将获得一个互斥锁LOCK_log,然后在事件组写完后释放,由于服务 ...
- mysql的更新用法_mysql更新语句的详细用法
首先,单个表的UPDATE语句: 更新[LOW_PRIORITY] [IGNORE] tbl_name SET col_name1 = expr1 [,col_name2 = expr2 ...] [ ...
- mysql预处理语句_MYSQL 预处理语句
一.预处理语句介绍 MySQL支持服务端预处理语句,预处理语句利用高效的客户端/服务端二进制协议.用占位符替换参数值的预处理语句有下列两个好处: 每次执行语句时,解析语句的开销更小.通常,数据库应用程 ...
- pb 执行存储过程带参数_SQL高级知识——存储过程
存储过程的定义 存储过程其实就是已预编译为可执行过程的一个或多个SQL语句. 通过调用和传递参数即可完成该存储过程的功能. 创建存储过程语法 CREATE PROC | PROCEDURE proce ...
最新文章
- 一个hadoop hdfs put 文件失败的小情况
- WF:要想绑到两个活动的属性值---依赖属性的定义方法
- zabbix源码安装实例
- mdt抓取镜像后只显示回收站_又涨了!废纸价格贵过废铜烂铁,回收站缩减废旧物品收购规模...
- asp.net 动态生成二维码加文字描述或者二维码加logo
- STK MATLAB联合仿真(一)STK与MATLAB的连接(COM与Connector)
- vm安装windows出问题:加载驱动程序 缺少计算机所需的介质驱动程序。这可能是DVD,U盘或者硬盘驱动程序如果你有包含该驱动程序的CD,DVD或U盘,请立即插入 注意:如果windows安装介..
- android逻辑分辨率,移动端web页面知识小结之手机分辨率与手机像素
- Java数据结构项目
- 洛谷P3899 [湖南集训]谈笑风生
- 使用Python和selenium的Chromedriver模拟登陆爬取网站信息(beautifulsoup)
- CS:APP 计算机系统 课程大作业
- PYTHON爬虫书籍
- 二十三、正则表达式中的“r”含义
- Vue教程-day05-2018年12月25日笔记
- 论文分享 | 可控笔触的快速风格化迁移
- ks 曲线_R语言计算KS值、绘制KS曲线
- Godaddy域名如何使用DNSPod做DNS解析
- MySQL8免安装版下载安装与配置(windows)
- 大学该不该开python教学_孩子该不该学编程?
热门文章
- 数据库上机3(小型数据库应用程序开发)
- No Browse Information available
- jquery设置元素的显示、隐藏
- 华为云计算HCIA(一)-服务器
- lsd 特征点匹配代码_线特征LSD and 描述子LBD(一)(示例代码)
- node服务器项目部署 - (电影网站)
- 享场地茶馆办公室v1.0.5 民宿 棋牌 共享茶室
- 机械师 f117 f1k 内存条 升级 安装步骤 增加内存与硬盘图文步骤
- 清除mac其他文件的免费软件:OmniDiskSweeper
- php超链接样式,html和css中设置超链接样式方法的总结