zoukankan      html  css  js  c++  java
  • MySql存储过程学习总结

    创建存储过程

    1、格式

      MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([过程参数[,...]]),举个例子:

    CREATE PROCEDURE proc1 (OUT s INT)
    BEGIN
    SELECT COUNT(*) INTO s FROM authors;
    END

      注:

    (1)存储过程根据需要可能会有输入输出输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开

    (2)过程体的开始与结束使用BEGINEND进行标识

    2、参数

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

    CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类型...]),MySQL 存储过程名字后面的“()”是必须的,即使没有一个参数,也需要“()”

    • IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
    DROP PROCEDURE IF EXISTS demo_in_parameter;
    CREATE
    PROCEDURE demo_in_parameter(IN p_in INT) BEGIN SELECT p_in; SET p_in=2; SELECT p_in; END --执行结果 SET @p_in=1; CALL demo_in_parameter(@p_in); SELECT @p_in; --输出1

      以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_in的值

    • OUT 输出参数:该值可在存储过程内部被改变,并可返回
    DROP PROCEDURE IF EXISTS demo_out_parameter;
    CREATE
    PROCEDURE demo_out_parameter(OUT p_out INT) BEGIN SELECT p_out; SET p_out=2; SELECT p_out; END --执行结果 SET @p_out=1; CALL demo_out_parameter(@p_out); SELECT @p_out; --输出2
    • INOUT 输入输出参数:调用时指定,并且可被改变和返回
    DROP PROCEDURE IF EXISTS demo_inout_parameter;
    CREATE
    PROCEDURE demo_inout_parameter(INOUT p_inout INT) BEGIN SELECT p_inout; SET p_inout=2; SELECT p_inout; END --执行结果 SET @p_inout=1; CALL demo_inout_parameter(@p_inout); SELECT @p_inout; --

    3、变量

    . 变量定义

    DECLARE variable_name [,variable_name...] datatype [DEFAULT value];

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

    例如:

      1. DECLARE l_int int unsigned default 4000000;  
      2. DECLARE l_numeric number(8,2) DEFAULT 9.95;  
      3. DECLARE l_date date DEFAULT '1999-12-31';  
      4. DECLARE l_datetime datetime DEFAULT '1999-12-31 23:59:59';  
      5. DECLARE l_varchar varchar(255) DEFAULT 'This will not be padded';

    . 变量赋值

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

     Ⅲ . 用户变量

     . 在MySQL客户端使用用户变量

    SELECT 'Hello World' into @x;
    SELECT @x;  
    
    --输出Hello World
    
    SET @y='Goodbye Cruel World'; 
    SELECT @y;  
    --输出Goodbye Cruel World
    
    SET @z=1+2+3; 
    SELECT @z;  
    --输出6

      ⅱ. 在存储过程中使用用户变量

    CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,' World'); 
    SET @greeting='Hello';  
    CALL GreetWorld( );  
    
    --输出Hello World 

     在存储过程间传递全局范围的用户变量

    CREATE PROCEDURE p1()   SET @last_procedure='p1';  
    CREATE PROCEDURE p2() SELECT CONCAT('Last procedure was ',@last_proc);  
    CALL p1( ); 
    CALL p2( ); 
    
    --输出Last procedure was p1 

     4、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 ]) //
    strposition开始,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为小数位数]

    注:返回类型并非均为整数

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

  • 相关阅读:
    hdu 1028 Ignatius and the Princess III (n的划分)
    CodeForces
    poj 3254 Corn Fields (状压DP入门)
    HYSBZ 1040 骑士 (基环外向树DP)
    PAT 1071 Speech Patterns (25)
    PAT 1077 Kuchiguse (20)
    PAT 1043 Is It a Binary Search Tree (25)
    PAT 1053 Path of Equal Weight (30)
    c++ 常用标准库
    常见数学问题
  • 原文地址:https://www.cnblogs.com/SamFlynn/p/4489478.html
Copyright © 2011-2022 走看看