zoukankan      html  css  js  c++  java
  • mysql存储过程实践总结

    一:参数类型

        1.IN 只能读取参数并在函数内部更改有效,不能持久化到外部变量

        2.OUT  不能读取参数,可以在函数内部修改并保存到外部变量

        3.INOUT 既能读取又能持久化

    二:基本格式

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

        1.变量定义  declare va int unsigned default 4000; declare va1 varchar(128) default 'hello,world';

        2.变量赋值  set temp=12;  定义用户变量:set @va='variables';

        3.注释: --note 当行注释 或者多行注释为类C风格

    三、控制语句

        1.if-then-else

    • mysql > DELIMITER //  
    • mysql > CREATE PROCEDURE proc2(IN parameter int)  
    •      -> begin 
    •      -> declare var int;  
    •      -> set var=parameter+1;  
    •      -> if var=0 then 
    •      -> insert into t values(17);  
    •      -> end if;  
    •      -> if parameter=0 then 
    •      -> update t set s1=s1+1;  
    •      -> else 
    •      -> update t set s1=s1+2;  
    •      -> end if;  
    •      -> end;  
    •      -> //  
    • mysql > DELIMITER ;

        2.case -when

    • mysql > DELIMITER //  
    • mysql > CREATE PROCEDURE proc3 (in parameter int)  
    •      -> begin 
    •      -> declare var int;  
    •      -> set var=parameter+1;  
    •      -> case var  
    •      -> when 0 then   
    •      -> insert into t values(17);  
    •      -> when 1 then   
    •      -> insert into t values(18);  
    •      -> else   
    •      -> insert into t values(19);  
    •      -> end case;  
    •      -> end;  
    •      -> //  
    • mysql > DELIMITER ;

        3.while --end while

    • mysql > DELIMITER //  
    • mysql > CREATE PROCEDURE proc4()  
    •      -> begin 
    •      -> declare var int;  
    •      -> set var=0;  
    •      -> while var<6 do  
    •      -> insert into t values(var);  
    •      -> set var=var+1;  
    •      -> end while;  
    •      -> end;  
    •      -> //  
    • mysql > DELIMITER ;

         4.repeat -until --end repeat

    • mysql > DELIMITER //  
    • mysql > CREATE PROCEDURE proc5 ()  
    •      -> begin   
    •      -> declare v int;  
    •      -> set v=0;  
    •      -> repeat  
    •      -> insert into t values(v);  
    •      -> set v=v+1;  
    •      -> until v>=5  
    •      -> end repeat;  
    •      -> end;  
    •      -> //  
    • mysql > DELIMITER ;

        5.LABEL:loop  leave LABEL  end loop;

    • mysql > DELIMITER //  
    • mysql > CREATE PROCEDURE proc6 ()  
    •      -> begin 
    •      -> declare v int;  
    •      -> set v=0;  
    •      -> LOOP_LABLE:loop  
    •      -> insert into t values(v);  
    •      -> set v=v+1;  
    •      -> if v >=5 then 
    •      -> leave LOOP_LABLE;  
    •      -> end if;  
    •      -> end loop;  
    •      -> end;  
    •      -> //  
    • mysql > DELIMITER ;

        6.iterate

    • mysql > DELIMITER //  
    • mysql > CREATE PROCEDURE proc10 ()  
    •      -> begin 
    •      -> declare v int;  
    •      -> set v=0;  
    •      -> LOOP_LABLE:loop  
    •      -> if v=3 then   
    •      -> set v=v+1;  
    •      -> ITERATE LOOP_LABLE;  
    •      -> end if;  
    •      -> insert into t values(v);  
    •      -> set v=v+1;  
    •      -> if v>=5 then 
    •      -> leave LOOP_LABLE;  
    •      -> end if;  
    •      -> end loop;  
    •      -> end;  
    •      -> //  
    • mysql > DELIMITER ; 

    四、基本函数

       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个字符,
    注: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) //
    开平方

     

  • 相关阅读:
    Dart语言学习笔记(5)
    使用 Dart 调用 REST API
    JSON数据的解析和生成(Dart)
    趣味编程:静夜思(Dart版)
    正则表达式(Dart)
    Dart语言学习笔记(4)
    Dart语言学习笔记(3)
    C++11特性之右值引用
    各大编程字体比较
    优先队列的应用 C++实现
  • 原文地址:https://www.cnblogs.com/ysuzhaixuefei/p/4034898.html
Copyright © 2011-2022 走看看