MySql-存储过程和函数

1 存储过程和函数的引入
在这里插入图片描述
2 创建存储过程和函数
(1)创建存储过程
在这里插入图片描述

DELIMITER &&
CREATE PROCEDURE pro_book ( IN bT INT,OUT count_num INT)
   READS SQL DATA
   BEGIN 
     SELECT COUNT(*) FROM t_book WHERE bookTypeId=bT;
   END 
   &&
DELIMITER ;

CALL pro_book(1,@total);//调用上面的存储过程

(2)创建存储函数
在这里插入图片描述

DELIMITER &&
CREATE FUNCTION func_book (bookId INT)
 RETURNS VARCHAR(20)
 BEGIN 
  RETURN ( SELECT bookName FROM t_book WHERE id=bookId );
 END 
    &&
DELIMITER ;

SELECT func_book(2);//调用上面的存储函数

(3)变量的使用
1.定义变量
在这里插入图片描述

DELIMITER &&
CREATE PROCEDURE pro_user()
	BEGIN
	 DECLARE a,b VARCHAR(20) ;
	 INSERT INTO t_user VALUES(NULL,a,b);
	END 
&&
DELIMITER ;

2.为变量赋值
在这里插入图片描述

DELIMITER &&
CREATE PROCEDURE pro_user2()
	BEGIN
	 DECLARE a,b VARCHAR(20) ;
	 SET a='java1234',b='123456';
	 INSERT INTO t_user VALUES(NULL,a,b);
	END 
&&
DELIMITER ;

在这里插入图片描述

DELIMITER &&
CREATE PROCEDURE pro_user3()
	BEGIN
	 DECLARE a,b VARCHAR(20) ;
	 SELECT userName2,password2 INTO a,b FROM t_user2 WHERE id2=1;
	 INSERT INTO t_user VALUES(NULL,a,b);
	END 
&&
DELIMITER ;

(4)游标的使用
在这里插入图片描述
1.声明游标
在这里插入图片描述
2.打开游标
在这里插入图片描述
3.使用游标
在这里插入图片描述
4.关闭游标
在这里插入图片描述

DELIMITER &&
CREATE PROCEDURE pro_user4()
	BEGIN
	 DECLARE a,b VARCHAR(20) ;
	 DECLARE cur_t_user2 CURSOR FOR SELECT userName2,password2 FROM t_user2;
	 OPEN cur_t_user2;
	 FETCH cur_t_user2 INTO a,b;
	 INSERT INTO t_user VALUES(NULL,a,b);
	 CLOSE cur_t_user2;
	END 
&&
DELIMITER ;

(5)流程控制的使用
在这里插入图片描述
1.IF语句
在这里插入图片描述

DELIMITER &&
CREATE PROCEDURE pro_user5(IN bookId INT)
	BEGIN
	 SELECT COUNT(*) INTO @num FROM t_user WHERE id=bookId;
	 IF @num>0 THEN UPDATE t_user SET userName='java12345' WHERE id=bookId;
	 ELSE
	   INSERT INTO t_user VALUES(NULL,'2312312','2321312');
	 END IF ;
	END 
&&
DELIMITER ;

2.CASE语句
在这里插入图片描述

DELIMITER &&
CREATE PROCEDURE pro_user6(IN bookId INT)
	BEGIN
	 SELECT COUNT(*) INTO @num FROM t_user WHERE id=bookId;
	 CASE @num
	  WHEN 1 THEN UPDATE t_user SET userName='java12345' WHERE id=bookId;
	  WHEN 2 THEN INSERT INTO t_user VALUES(NULL,'2312312','2321312');
	  ELSE INSERT INTO t_user VALUES(NULL,'231231221321312','2321312321312');
	 END CASE ;
	END 
&&
DELIMITER ;

3.LOOP、LEAVE语句
在这里插入图片描述

DELIMITER &&
CREATE PROCEDURE pro_user7(IN totalNum INT)
	BEGIN
	  aaa:LOOP
	    SET totalNum=totalNum-1;
	    IF totalNum=0 THEN LEAVE aaa ;
	    ELSE INSERT INTO t_user VALUES(totalNum,'2312312','2321312');
	    END IF ;
	  END LOOP aaa ;
	END 
&&
DELIMITER ;

4.ITERATE语句
在这里插入图片描述

DELIMITER &&
CREATE PROCEDURE pro_user8(IN totalNum INT)
	BEGIN
	  aaa:LOOP
	    SET totalNum=totalNum-1;
	    IF totalNum=0 THEN LEAVE aaa ;
	    ELSEIF totalNum=3 THEN ITERATE aaa ;
	    END IF ;
	    INSERT INTO t_user VALUES(totalNum,'2312312','2321312');
	  END LOOP aaa ;
	END 
&&
DELIMITER ;

5.REPEAT语句
在这里插入图片描述

DELIMITER &&
CREATE PROCEDURE pro_user9(IN totalNum INT)
	BEGIN
	  REPEAT
	     SET totalNum=totalNum-1;
	     INSERT INTO t_user VALUES(totalNum,'2312312','2321312');
	     UNTIL totalNum=1 
	  END REPEAT;
	END 
&&
DELIMITER ;

6.WHILE语句
在这里插入图片描述

DELIMITER &&
CREATE PROCEDURE pro_user10(IN totalNum INT)
	BEGIN
	 WHILE totalNum>0 DO
	  INSERT INTO t_user VALUES(totalNum,'2312312','2321312');
	  SET totalNum=totalNum-1;
	 END WHILE ;
	END 
&&
DELIMITER ;

调用上面的语句

CALL pro_user();
CALL pro_user2();
CALL pro_user3();
CALL pro_user4();
CALL pro_user5(5);
CALL pro_user6(6);
CALL pro_user7(11);
CALL pro_user8(11);
CALL pro_user9(11);
CALL pro_user10(10);

3 调用存储过程和函数
(1)调用存储过程
在这里插入图片描述
(2)调用存储函数
在这里插入图片描述
4 查看存储过程和函数
(1)SHOW STATUS语句查看存储过程和函数的状态
在这里插入图片描述

SHOW PROCEDURE STATUS LIKE 'pro_book';

(2)SHOW CREATE语句查看存储过程和函数的定义
在这里插入图片描述

SHOW CREATE PROCEDURE pro_book;

(3)从information_schema.Routines表中查看存储过程和函数的信息

5 修改存储过程和函数
在这里插入图片描述

ALTER PROCEDURE pro_book  COMMENT '我来测试一个COMMENT';

6 删除存储过程和函数
在这里插入图片描述

DROP PROCEDURE pro_user3;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值