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变量来接收返回的总数