https://zhuanlan.zhihu.com/p/23423264
Stored Procedures-Official explanation:
是sql语句和控制语句的预编译集合。以一个名称存储并作为一个单元处理。
Stored procedures-to speak plainly:
把需要的命令预编译好。存到数据库。只在第一次的时候需要编译,存储后,以后使用的时候客户端直接(传参)调用。各种省事。
Advantages:
增强sql语句的功能性和灵活性实现较快的执行速度减少网络流量【因为往数据库传递的参数少了。所以请求少了】
How to use:
A、首先需要DELIMITER 语句来修改定界符B、然后创建存储过程【CREATE PROCUDURE】过程体中可以用 in 和 out 传参。C、通过CALL来调用
Why use Delitimiter to modify delimiters?
mysql默认以分号作为sql语句的结束来进行执行,当我们在创建存储过程时,为
了不让完整的存储过程语句由于分号而提前执行,需要临时规定以//或者$$来作
为结束符号。这样的话,创建存储过程时,中间的分号会被忽略,直到遇到//符
号才执行语句。
Attention:
A、因为存储过程的 过程体不可修改,所以设置错误后,一般都是删除后,重新创建。B、设置的参数,不要和表中的字段名字相同。DROP PROCEDURE 名字; 删除命令
Example: "Stored procedure with one parameter in"
@var int p_id 关联iddelimiter // 重新定义定界符create procedure removeUserId(IN p_id INT UNSIGNED)BEGINDELETE FROM users where id = p_id;END//delitimer ; 这里是把定界符在修改回来CALL removeUserId(3); 调用
举例:【带有IN 和 OUT类型参数的存储过程】
@var int p_id 关联id@var int userNums 删除后剩下的条数DELITIMER //CRTEATE PROCEDURE removeAndReturnUserNums(IN p_id INT UNSIGNED,OUT userNums INT UNSIGNED) 这里设置了两个参数BEGINDELETE FROM users WHERE id = p_id;SELECT COUNT(id) FROM USERS INTO userNums;END//DELITIMER ;CALL removeAndRrturnUserNums(27,@nums) //这里的@ 是用户变量。下面是总结注意:mysql变量的术语分类:A.用户变量:以"@"开始,形式为"@变量名"用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效B、全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名 或者 set @@global.变量名 对所有客户端生效。只有具有super权限才可以设置全局变量
Recognize a system function: Row_count ()
row_count(); 得到操作行数。(单独用没用)例子:插入数据INSERT test(username) VALUES(‘A‘),(‘B‘),(‘C‘); SELECT ROW_COUNT(); //返回被插入的记录总数 结果为3
Example: "Stored procedure with multiple out type parameters"
@var SMALLINT p_age 关联p_age@var SMALLINT deleteUsers 删除总条数@var SMALLINT userCounts 剩余总条数DELIMITER //CREATE PROCEDURE rmUserByAgeAndRtInfos(IN p_age SMALLINT UNSIGNED, OUT deleteUsers SMALLINT UNSIGNED, OUT userCounts SMALLINT UNSIGNED)BEGINDELETE FROM users WHERE WHERE age = p_age; //删除条件SELECT ROW_COUNT() INTO deleteUsers;//返回刚删的记录SELECT COUNT(id) from users INTO userCounts;//得到剩余的ID数END//DELIMITER ;CALL rmUserByAgeAndRtInfos(23, @a, @b);SELECT @a, @b;
Summarize:
存储过程一般都是实现复杂一些的功能存储过程一般独立来执行。存储过程常常针对表操作。根据需要定制存储过程。
Stored Procedure--mysql