Stored Procedure--mysql

Source: Internet
Author: User

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

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.