频道栏目
首页 > 资讯 > Smarty > 正文

mysql教程:Mysql 的存储过程和存储函数

16-01-07        来源:[db:作者]  
收藏   我要投稿

mysql储存函过程和储存函数都属于存储程序

优点:

v提高安全性

v简化mysql查询

v减轻带宽负担

缺点:

v增加服务器负担

v对我们开发者来说,难度大一点

PHP中的函数

Function funname(参数){
//函数体
Return 
}

对于mysql,如果有返回值的存储程序,我们就称其为存储函数,

没有返回值的存储程序,我们就称其为存储过程。

下面主要是按存储过程来讲解

1.0快速案例:

delimiter $
//代码块
end $
#调用存储过程
 call show_times();
#查看存储过程
show procedure status
#查看创建存储过程
show create procedure show_times; 
#删除存储过程
 drop procedure show_times;

1.1声明分隔符

DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。$,$$,//

1.2参数

MySQL存储过程的参数定义,共有三种参数类型,IN,OUT,INOUT,形式如:procedure(过程)

CREATEPROCEDURE([[IN|OUT|INOUT]参数名数据类形...])

IN输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

INnint<=>nint

OUT输出参数:该值可在存储过程内部被改变,并可返回

INOUT输入输出参数:调用时指定,并且可被改变和返回

I储存程序变量:

DECLAREvariable_name[,variable_name...]datatype[DEFAULTvalue];

其中,datatype为MySQL的数据类型,如:int,float,date,varchar(length)

例如:

DECLARE l_int int unsigned default 4000000;   
DECLARE l_numeric number(8,2) DEFAULT 9.95;   
DECLARE l_date date DEFAULT '1999-12-31';    
DECLARE l_varchar varchar(255) DEFAULT 'This will not be padded';  

Ⅱ.变量赋值

SET变量名=表达式值[,variable_name=expression...]

Set不能忘记

1.3#写一个生产随机字符串的存储过程

要求:根据给定的个数,然后输出一个随机的字符串

学习存储过程有何用?

1.了解存储程序的机制。

2.看得懂别人写好的存储程序。

3.会写基本的存储程序。

4.引出mysql自带的函数

#p#mysql自带函数#e#

mysql自带函数

Mysql本身已经封装好了大量的一些存储程序,我们在开发的时候可以直接拿来使用。

Mysql字符串函数

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

mysql>selectsubstring('abcd',0,2);

+-----------------------+

|substring('abcd',0,2)|

+-----------------------+

1rowinset(0.00sec)

mysql>selectsubstring('abcd',1,2);

+-----------------------+

|substring('abcd',1,2)|

+-----------------------+

|ab|

+-----------------------+

1rowinset(0.02sec)

TRIM([[BOTH|LEADING|TRAILING][padding]FROM]string2)//去除指定位置的指定字符

UCASE(string2)//转换成大写

RIGHT(string2,length)//取string2最后length个字符

SPACE(count)//生成count个空格

数学类

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为小数位数]

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,INTERVALd_valued_type)//在date2中加上日期或时间

DATE_FORMAT(datetime,FormatCodes)//使用formatcodes格式显示datetime

DATE_SUB(date2,INTERVALd_valued_type)//在date2上减去一个时间

DATEDIFF(date1,date2)//两个日期差

DAY(date)//返回日期的天

DAYNAME(date)//英文星期

DAYOFWEEK(date)//星期(1-7),1为星期天

DAYOFYEAR(date)//一年中的第几天

EXTRACT(interval_nameFROMdate)//从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

相关TAG标签
上一篇:mysql教程:mysql事务与mysql储存引擎
下一篇:smarty模板中的循环操作
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站