设为首页收藏本站
查看: 67|回复: 0

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

[复制链接]

论坛元老

Rank: 6Rank: 6

积分
34274
主题
17031
UID
1347
M币
67
贡献
17176

  • 发表于 2013-9-12 18:06:00 | 显示全部楼层 |阅读模式
    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(过程)
      CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类形...])  
      IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
      IN n int     n int
      OUT 输出参数:该值可在存储过程内部被改变,并可返回
      INOUT 输入输出参数:调用时指定,并且可被改变和返回
      I 储存程序变量:
      DECLARE variable_name [,variable_name...] datatype [DEFAULT value];
      其中,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> select substring('abcd',0,2);   
      +-----------------------+   
      | substring('abcd',0,2) |   
      +-----------------------+   
      1 row in set (0.00 sec)   
      mysql> select substring('abcd',1,2);   
      +-----------------------+   
      | substring('abcd',1,2) |   
      +-----------------------+   
      |     ab                |   
      +-----------------------+   
      1 row in set (0.02 sec)   
      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 , 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
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    在我站开通SVIP可同时获得17个站点VIP资源 立即登录 立即注册
    快速回复 返回顶部 返回列表