Mysql 创建存储

工作中有时候需要自己去创建存储,然后调用存储去获得一些数据等

Mysql创建存储

语法

CREATE PROCEDURE 存储程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 …] 过程体

DELIMITER //
CREATE PROCEDURE testprocedure (OUT s int)
BEGIN
SELECT COUNT(*) INTO s FROM students;
END
//
DELIMITER ;

// --> 分隔符

参数
IN:参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT:该值可在存储过程内部被改变,并可返回
INOUT:调用时指定,并且可被改变和返回

过程体

过程体的开始与结束使用BEGIN与END进行标识。

IN参数例子

DELIMITER //
  CREATE PROCEDURE in_param(IN p_in int)
    BEGIN
    SELECT p_in;
    SET p_in=2;
    SELECT p_in;
    END;
    //
DELIMITER ;
#调用
SET @p_in=1;
CALL in_param(@p_in);
SELECT @p_in;

OUT参数例子

DELIMITER //
 CREATE PROCEDURE out_param(OUT p_out int)
   BEGIN
     SELECT p_out;
     SET p_out=2;
     SELECT p_out;
   END;
   //
DELIMITER ;

#调用
SET @p_out=1;
CALL out_param(@p_out);
SELECT @p_out;

实例:
yj_shop_goods表没有数据,想向这张表插入1000条数据

在这里插入图片描述

写个存储

在这里插入图片描述
执行,OK,不报错

DELIMITER//

CREATE PROCEDURE p_loop_test ()             

BEGIN

DECLARE AA INT;

SET AA = 1;

LOOP_LABLE: LOOP

INSERT INTO yj_shop_goods (Id_P,goodname,price,shop,s_no) VALUES(1000+AA,'水果',1,'店面a',100000+AA);
SET AA = AA + 1;

IF AA > 1000 THEN

LEAVE LOOP_LABLE;

END IF;

END LOOP;

END; //

在这里插入图片描述

这个时候查询是没数据的,要调用存储
在这里插入图片描述

调用存储
命令: CALL p_loop_test;

调用后查询
在这里插入图片描述

OK,存储写成功并简单调用

条件语句

IF-THEN-ELSE语句

DROP PROCEDURE IF EXISTS proc3;
DELIMITER //
CREATE PROCEDURE proc3(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 ;
  //
DELIMITER ;

CASE-WHEN-THEN-ELSE语句

DELIMITER //
  CREATE PROCEDURE proc4 (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 ;
  //
DELIMITER ;

循环语句

WHILE-DO…END-WHILE
DELIMITER //
  CREATE PROCEDURE proc5()
    BEGIN
      DECLARE var INT;
      SET var=0;
      WHILE var<6 DO
        INSERT INTO t VALUES (var);
        SET var=var+1;
      END WHILE ;
    END;
  //
DELIMITER ;
 

LOOP…END LOOP

DELIMITER //
	  CREATE PROCEDURE proc7 ()
	    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;
	  //
	DELIMITER ;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值