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)相关推荐

  1. mysql 5.7 循环语句_MySQL循环语句|mysql|loop|delimiter|procedure|调用_网易订阅

    mysql常见的三种循环方式:while.repeat和loop循环.还有一种goto,不推荐使用. 1.while循环 -- 设置mysql分隔符为//,也就意味着,当遇到下一个//时,整体执行SQ ...

  2. mysql的各种语句_MySQL 常用语句大全

    MySQL 常用语句大全 一.连接 MySQL 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 1.例 1:连接到本机上的 MYSQL. 首先在打开 DOS 窗口,然后进入目录 my ...

  3. mysql 存储过程 简书_MySQL学习之存储过程

    一.存储过程 1-1.含义:一组预先编译好的SQL语句的集合,理解成批处理语句 1.提高代码的重用性 2.简化操作 3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率 存储过程和函数:类 ...

  4. mysql命令书写顺序_MySQL SQL语句书写顺序和执行顺序

    SQL语句书写顺序和执行顺序 (7) SELECT (8) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING (9 ...

  5. mysql set语句_MySQL Prepared语句简介

    之前的MySQL版本4.1,查询以文本格式发送到MySQL服务器. 之后,MySQL服务器使用文本协议将数据返回给客户端.MySQL必须完全解析查询,并将结果集转换为字符串,然后再将其返回给客户端. ...

  6. mysql插入二进制命令_MySQL将语句写入到binlog二进制日志中

    由于二进制日志是公共资源,所有线程都要写二进制日志,所以一定要避免两个线程同时更新二进制日志.因此,在事件组写二进制日志时,二进制日志将获得一个互斥锁LOCK_log,然后在事件组写完后释放,由于服务 ...

  7. mysql的更新用法_mysql更新语句的详细用法

    首先,单个表的UPDATE语句: 更新[LOW_PRIORITY] [IGNORE] tbl_name SET col_name1 = expr1 [,col_name2 = expr2 ...] [ ...

  8. mysql预处理语句_MYSQL 预处理语句

    一.预处理语句介绍 MySQL支持服务端预处理语句,预处理语句利用高效的客户端/服务端二进制协议.用占位符替换参数值的预处理语句有下列两个好处: 每次执行语句时,解析语句的开销更小.通常,数据库应用程 ...

  9. pb 执行存储过程带参数_SQL高级知识——存储过程

    存储过程的定义 存储过程其实就是已预编译为可执行过程的一个或多个SQL语句. 通过调用和传递参数即可完成该存储过程的功能. 创建存储过程语法 CREATE PROC | PROCEDURE proce ...

最新文章

  1. 一个hadoop hdfs put 文件失败的小情况
  2. WF:要想绑到两个活动的属性值---依赖属性的定义方法
  3. zabbix源码安装实例
  4. mdt抓取镜像后只显示回收站_又涨了!废纸价格贵过废铜烂铁,回收站缩减废旧物品收购规模...
  5. asp.net 动态生成二维码加文字描述或者二维码加logo
  6. STK MATLAB联合仿真(一)STK与MATLAB的连接(COM与Connector)
  7. vm安装windows出问题:加载驱动程序 缺少计算机所需的介质驱动程序。这可能是DVD,U盘或者硬盘驱动程序如果你有包含该驱动程序的CD,DVD或U盘,请立即插入 注意:如果windows安装介..
  8. android逻辑分辨率,移动端web页面知识小结之手机分辨率与手机像素
  9. Java数据结构项目
  10. 洛谷P3899 [湖南集训]谈笑风生
  11. 使用Python和selenium的Chromedriver模拟登陆爬取网站信息(beautifulsoup)
  12. CS:APP 计算机系统 课程大作业
  13. PYTHON爬虫书籍
  14. 二十三、正则表达式中的“r”含义
  15. Vue教程-day05-2018年12月25日笔记
  16. 论文分享 | 可控笔触的快速风格化迁移
  17. ks 曲线_R语言计算KS值、绘制KS曲线
  18. Godaddy域名如何使用DNSPod做DNS解析
  19. MySQL8免安装版下载安装与配置(windows)
  20. 大学该不该开python教学_孩子该不该学编程?

热门文章

  1. 数据库上机3(小型数据库应用程序开发)
  2. No Browse Information available
  3. jquery设置元素的显示、隐藏
  4. 华为云计算HCIA(一)-服务器
  5. lsd 特征点匹配代码_线特征LSD and 描述子LBD(一)(示例代码)
  6. node服务器项目部署 - (电影网站)
  7. 享场地茶馆办公室v1.0.5 民宿 棋牌 共享茶室
  8. 机械师 f117 f1k 内存条 升级 安装步骤 增加内存与硬盘图文步骤
  9. 清除mac其他文件的免费软件:OmniDiskSweeper
  10. php超链接样式,html和css中设置超链接样式方法的总结