博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL 存储过程
阅读量:6581 次
发布时间:2019-06-24

本文共 3368 字,大约阅读时间需要 11 分钟。

存储过程是通过给定的语法格式编写自定义的数据库API,类似于给数据库编写可执行函数。

简介

存储过程是一组为了完成特定功能的SQL语句集合,是经过编译后存储在数据库中。

存储过程增强了SQL语言的功能和灵活性,它可以使用流控制语句编写来完成复杂的判断和计算。

存储过程是把完成特定功能的SQL语句集合统一在数据库中进行处理,避免了多次网络IO请求造成的网络负载。

mysql> DELIMITER //mysql> CREATE PROCEDURE proc1(OUT s int)        -> BEGIN        -> SELECT COUNT(*) INTO s FROM person;        -> END //mysql> DELIMITER;

基本语法

基本结构

DELIMITER //DROP PROCEDURE IF EXISTS some_func;CREATE PROCEDURE some_func(    IN param1 INT,    IN param2 VARCHAR(32),    OUT res INT)BEGIN    SQL-SCRIPTEND //DELIMITER;

调用语句如下,

CALL some_func(params...);

变量

在存储过程中,函数参数包含三种变量,

  • IN 输入参数,必须在调用存储过程时指定
  • OUT 输出参数,可在存储过程内部被改变,返回该结果
  • INOUT 输入输出参数,调用时指定并且可被改变和返回

在存储过程内部,参数的定义如下,

DECLARE var_name [, var_name] var_type [default value];

用户变量

SET @mvar = 'Hello World';

变量赋值

SET var_name = 表达式;

条件语句

if var=0 then   insert into person values ('f');else  insert into person values ('ff');end if;

case语句

case varwhen 0 then  insert into person values ('f');when 1 then  insert into person values ('ff');else  insert into person values ('fff');end case;

循环语句

WHILE语句,同C语言中的while语句一样。

while var < N do  insert into person values ('f');  set var = var + 1;end while;

REPEAT语句,类似于C语言中的do while语句。

repeat  insert into person values ('f');  set var = var + 1;until var >= Nend repeat;

LOOP语句,没有结束的判断语句,利用leave来跳出循环,类似于break。

set @var = 0;loop_name:loop  set @var = @var + 1;  if @var > 5 then    leave loop_name;  end if;end loop loop_name;select @var;

基本函数

mysql内置了一些函数,这些函数可以极大地提高编写存储过程的效率。

字符串操作如下,

CHARSET(str) //获取字符集CONCAT(str1, str2, ...) //联接字符串INSTR(str, substr) //返回substr出现在str中的第一个位置LOCATE(substr, str, start_position) //返回substr在str的start_position开始第一次出现的位置LCASE(str) //将所有字符转换为小写LEFT(str, length) //返回str从左边开始的length个字符LENGTH(str) //返回str长度LOAD_FILE(file_name) //读取文见内容LPAD(str, length, pad) //重复在str的首部插入pad,直到str的长度达到lengthLTRIM(str) //去除str首部的空格RTRIM(str) //去除str尾部的空格STRCMP(str1, str2) //字符串比较SUBSTRING(str, start_position, length) //截取字符串,默认第一个字符下标为1

math相关操作如下,

ABS(i) //绝对值BIN(i) //十进制->二进制CEILING(i) //向上取整CONV(i, from, to) //进制转换FLOOR(i) //向下取整FORMAT(i, n) //保留小数位数HEX(i) //转十六进制LEAST(i0, i1, i2, ..) //求最小值MOD(i, demoninator) //求余POWER(I, POWER) //求指数RAND([seed]) //随机数ROUND(I, [, DECIMALS]) //四舍五入,decimals为保留小数位数SQRT(number2) //开平方

时间相关操作如下,

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

参考

本文 由  创作,采用 进行许可。欢迎转载,请注明出处:
转载自: 

你可能感兴趣的文章
李洪强iOS开发之OC[002] - OC中注释以及@符号的使用
查看>>
【转载】COM编程入门不得不看的文章 :第一部分 什么是COM,如何使用COM
查看>>
bug-android之ActivityNotFoundException
查看>>
IT战略规划咨询
查看>>
JavaScript 最佳实践
查看>>
NOIP2013花匠
查看>>
告别脚本小子【编写端口扫描工具】
查看>>
监控录像
查看>>
HtmlHelper使用大全
查看>>
SQLServer 之 聚合函数
查看>>
正则输入非0的整数
查看>>
TortoiseGit与GitHub项目关联设置
查看>>
java模式:深入单例模式
查看>>
Struts2的模板和主题theme及自定义theme的使用
查看>>
ImageView显示图像控件
查看>>
Deepin-文件目录介绍
查看>>
MySQL数据库如何去掉数据库中重复记录
查看>>
【原创】如何写一篇“用户友好”的随笔
查看>>
【16】成对使用new和delete时要采取相同形式
查看>>
POJ 2352 Stars
查看>>