mysql存储过程

SQL命令执行过程:

如果可以省去其中语法分析和语法编译的环节,执行效率就会提高;

什么是存储过程?

存储过程是SQL语句与控制语句预编译的集合,以一个名称存储并作为一个单元处理;

简单来说是:多条相同的SQL命令执行时每次都会分析、编译、执行,而存储过程只在第一次执行时分析、编译,之后每次调用都会直接调用编译的结果,这样效率就会提高。

存储过程的优点:

1、增强了SQL的功能和灵活性(存储过程中可以加入多条判断语句,根据判断结果不同,执行的结果也会不同)

2、提升了执行的效率(存储过程只在第一次执行时会分析语句、编译语句)

3、减少网络流量(执行普通SQL传递的字符多,越复杂的SQL语句传递的字符越多,存储过程的字符数稳定且少)

创建存储过程:

1、没有任何参数:

   CREATE PROCEDURE sp1() SELECT NOW();

使用存储过程,不带参数的情况下:(加不加括号都可以):

(1)CALL sp1;

 

(2)CALL sp1();

删除存储过程:

  DROP PROCEDURE 存储过程名

  列:DROP PROCEDURE sp1;

2、有一个参数:参数是id,使用removeUserById(),传递一个id参数,将参数传递给DELETE语句

   CREATE PROCEDURE removeUserById(IN p_id INT UNSIGNED)

   -> DELETE FROM users WHERE id=p_id;

   执行完成后:

(1)首先查询表中所有数据:

    

(2)使用建立的存储过程:CALL removeUserById(17);

 

(3)查询表中数据:

 

3、创建拥有返回值的存储过程:根据id删除并返回删除之后的总数

  改变结束符号为“//” 在创建存储过程时会用到“;” 不能让它结束

  DELIMITER //

  创建存储过程:输入用IN ,参数是p_id, INT 类型,UNSIGNED 代表无符号整型,返回参数用OUT,参数名 userNums,有两条语句用BEGIN和END包起来,SELECT ...INTO...将查询到的结果存入INTO后面的变量userNums

  CREATE PROCEDURE removeUserAndReturnUserNums(IN p_id INT UNSIGNED,OUT userNums INT UNSIGNED)

  ->BEGIN

  ->DELETE  FROM users WHERE id=p_id;

  ->SELECT COUNT(id) FROM users INTO userNums;

  ->END

  ->// 

  将结束符号改回原来的“;” 

  DELIMITER ;

 

  查询users表中的记录总数:

  

  使用存储过程并查看:@nums变量来接收返回的总数

                               

 如果有多个参数以,号分隔,输入参数用IN ,返回参数用OUT,类型与表中字段类型一致。       

posted @ 2019-05-12 17:44  LikFre  阅读(185)  评论(0编辑  收藏  举报