最近在看一些mysql的视频,随手将自己的笔记分析到博客园,希望可以帮助到你,大家可以共同进步!加油

存储过程

  含义:一组预先编译好的sQL语句的集合,理解成批处理语句

  语法:

CREATE  PROCEDURE 存储过程名(参数列表)

BEGIN

(一组合法的SQL语句)

END

    参数列表包含三部分: 参数模式 参数名 参数类型

    参数模式分3中:

IN :该参数可以作为输入,也就是该参数需要调用方传入值

OUT :该参数可以作为输出,也就是该参数可以作为返回值

INOUT: 该参数既可以作为输入又可以作为输出,也就是既需要传入值又可以返回值

DELIMITER 结束标记

CALL 存储过程名(实参列表)

  案例:

    1, 创建带in模式参数的存储过程

      根据id号,查询对应的身份信息

DELIMITER $

CREATE PROCEDURE mp2(IN id INT)

BEGIN

SELECT * FROM admin ad WHERE ad.id=id;

END $

CALL mp2(005) $

    2, 创建out模式存储过程 

    DELIMITER $
    CREATE PROCEDURE myout(IN id INT,OUT username VARCHAR(20))
    BEGIN
    SELECT admin.`username` INTO username
    FROM admin
    WHERE admin.`id`=id;
    END $    

    #调用       CALL myout(4,@name)

    3,创建带inout模式参数的存储过程

     传入a和b两个值,最终a和b都翻倍并返回

    DELIMITER $
    CREATE PROCEDURE myinout(INOUT a INT,INOUT b INT)
    BEGIN
     SET a=a*2;
     SET b=b*2;
    END $

    #调用   SET @m=10$     SET @n=20$    CALL myinout(@m,@n)$     SELECT @m,@n$

函数:

  菜鸟教程:学习下常用的函数:https://www.runoob.com/mysql/mysql-functions.html

  

  语法:

FUNCTION func_name ( [func_parameter] ) //括号是必须的,参数是可选的   RETURNS type

    begin

    end 

  •   func_parameters为函数的参数列表,参数列表的形式为:[IN|OUT|INOUT] param_name type

  案例:

      1,根据ID获取员工姓名与员工工资

        DELIMITER //

        CREATE FUNCTION GetEmployeeInformationByID(id INT)  RETURNS VARCHAR(300)

        BEGIN
          RETURN(SELECT CONCAT('employee name:',employee_name,'---','salary: ',employee_salary) FROM employees WHERE           employee_id=id);
        END//
        DELIMITER
      调用: select  GetEmployeeInformationByID(1)

     2,创建函数,传入2个float,返回他们的和

      DELIMITER //
      CREATE FUNCTION getsun(num1 FLOAT,num2 FLOAT) RETURNS FLOAT
      BEGIN
        RETURN (num1+num2);
      END//
      调用: SELECT getsun(1,2)

  查看数据库的函数或者是方法的操作可以在mysql这个库的pro这个表里面进行查询

流程控制:

    含义:

    案例:

          1,if结构:实现多重分支

          语法:

             if 条件1 then 语句1;

             elseif 条件2 then 语句2; ......

             [else 语句n;]

             end if;

          应用 在begin end 中    

    案例1、 输入成绩,100-80返回A,80-70返回B,70以下返回C

      create FUNCTION return_leavl_test( source int ) returns varchar(20)
      BEGIN
        if source<=100 and source>=80 then return 'A';
        ELSEIF source>=70 then return 'B';
        ELSE return 'C';
        end IF;
      END

      调用方法:select return_leavl_test(60)

      2、分支结构 ----- if函数 用于任何地方
      if函数,实现简单的双分支结构 if(表达式1,表达式2,表达式3) 

      如果表达式1成立,执行表达式2,如果表达式1失败,执行表达式3  
      3、case 结构
      和java一样的结构
      swich ()
        case...
      或者是:
      case 表达式:then

  

循环:

分类:    

  while/loop/repeat

控制:

  iterate=continue:结束本次,进行下次

  leave  =  break  跳出,结束循环

while语法:

 [标签:] while 循环条件 do

    循环体;

  end while [标签] ;

loop语法:

  [标签:] loop

    循环体;

   end loop [标签];

可以用来模拟简单的死循环

repeat语法:

  [标签:] repeat

    循环体;

  until 结束循环的条件

  end repeat [标签];

案例1 没有进行循环控制

-- 循环插入数据存储过程
DROP PROCEDURE insert_0530type_while1

DELIMITER //
CREATE PROCEDURE insert_0530type_while1(IN insertcount INT)
BEGIN
  DECLARE i INT DEFAULT 1;
  WHILE i<=insertcount DO
    INSERT INTO 0530_type(tname) VALUES (CONCAT(i,'test'));
    SET i=i+1;
  END WHILE;
END//
CALL insert_0530type_while1(10)

案例2. 有循环控制--leave

TRUNCATE TABLE 0530_type;
DELIMITER //
CREATE PROCEDURE insert_0530type_while2(IN insertcount INT)
BEGIN
  DECLARE i INT DEFAULT 1;
  a:WHILE i<=insertcount DO
    INSERT INTO 0530_type(tname) VALUES (CONCAT(i,'test'));
    IF i>=20 THEN LEAVE a;
    END IF;
    SET i=i+1;
  END WHILE a;
END//
CALL insert_0530type_while2(30);

案例3 有循环控制--iterate

TRUNCATE TABLE 0530_type;
DELIMITER //
CREATE PROCEDURE insert_0530type_while3(IN insertcount INT)
BEGIN
  DECLARE i INT DEFAULT 0;
  a:WHILE i<=insertcount DO
  SET i=i+1;
    IF MOD(i,2)!=0 THEN ITERATE a;
    END IF;
  INSERT INTO 0530_type(tname) VALUES (CONCAT(i,'test'));

  END WHILE a;
END//
CALL insert_0530type_while3(30);

 

常用案例:

#1、向该表中插入指定个数的,随机的字符串
create table stringcontent(
id int PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(20)
);

delimiter $
CREATE PROCEDURE test_randstr_insert(in insertCount INT)
BEGIN
  DECLARE i int DEFAULT 1;#定义一个循环变量i,表示插入的次数
  DECLARE str varchar (26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
  DECLARE pro int DEFAULT 1;
  DECLARE len int DEFAULT 1;#截取的字符串的长度

  WHILE i<=insertCount DO
    #SUBSTR(str,pos,len) str=变量str pro=起始索引 len:是截取的长度
    set len=FLOOR(RAND()*(20-pro+1)+1);#len这个长度应该是最少是1,最大是26-起始索引+1
    set pro=FLOOR(RAND()*26+1);#起始索引应该是从1-26
    insert into stringcontent(content)VALUES(SUBSTR(str,pro,len));
    SET i=i+1;#循环变量更新
  end while;
END $