mysql 存储过程

2016/12/19 mysql

mysql 存储过程

链接

mysql - 存储过程

内容

定义

存储过程如同一门程序设计语言,同样包含了数据类型、流程控制、输入和输出和太极的函数库。

优点

  • 编译优化,快
  • 封装与抽象,简单调用
  • 功能强大,逻辑强大
  • 限制与安全
  • 减少网络流量

基本语法

创建存储过程

create procedure sp_name()
begin
......
end

调用存储过程

call sp_name()

注意: 存储过程名称后面必须加括号,哪怕该存储过程没有参数传递。

删除存储过程

drop procedure sp_name

其他常用命令

  • 显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等。

    show procedure sp_name

  • 显示一个Mysql存储过程的详细信息

    show create procedure sp_name

数据类型及运算符

变量

变量分为用户变量和系统变量,系统变量又分为会话和全局级变量

  • 自定义变量

    DECLARE a INT; SET a=100;

    可以用以下语句代替:

    DECLARE a INT DEFAULT 100;

  • 变量SET语句

    存储过程的set语句是一般的扩展版本 被参考变量可能是子程序声明的变量或者是全局服务器变量,在存储过程中,SET语句作为预先存在的SET语句的一部分来实现。

  • SELECT … INTO … 语句

    把选定的列直接存储到变量。

常用函数

  • 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个字符,

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

    UCASE (string2 ) //转换成大写

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

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

    注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1

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

    注:返回类型并非均为整数,如下文: SIGN (number2 ) //

  • 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) //开平方

链接

mysql - 存储过程

Show Disqus Comments

Search

    Post Directory