Mysql必读窥探mysql存储过程细节

Mysql必读窥探mysql存储过程细节,第1张

概述介绍《Mysql必读窥探mysql存储过程细节》开发教程,希望对您有用。

《MysqL必读窥探MysqL存储过程细节》要点:
本文介绍了MysqL必读窥探MysqL存储过程细节,希望对您有用。如果有疑问,可以联系我们。

MysqL应用存储过程,可以这样认为,将我们需要特殊处理的SQL语句封装成函数,当需要的时候我们只需调用这个函数就可以实现我们想要的 *** 作,这个过程我们可以称之为存储过程.当然了,真正存储过程的定义不是这样的.但是我们可以这样简单的去理解存储过程.

MysqL应用下面我们看一个简单的使用存储过程的例子.

MysqL应用首先我们新建一张表 proced:

MysqL应用create table proced(     ID int(5) primary key auto_increment,name varchar(50),type varchar(50));

MysqL应用然后我们需要向这个表中插入10万条数据,这个时候我们需要借助存储过程来实现这一功能.

MysqL应用MysqL> delimiter //MysqL> create procedure adddata()     -->begin     -->declare n int default 0;     -->while n<100000     -->do     -->insert into proced(name,type) values(‘迹忆博客','onmpw');     -->set n = n+1;     -->end while;     -->end     -->//MysqL> delimiter ;MysqL> call adddata();

MysqL应用使用上述存储过程,我们就可以向proced表中插入10万条数据了.

MysqL应用借助上述小例子,我们来讲一下如何创建一个存储过程.

MysqL应用创建存储过程

MysqL应用首先我们来看一下创建存储过程的语法:

MysqL应用CREATE PROCEDURE procedure_name(IN/OUT/INOUT parameter TYPE)BEGIN     procedure_bodyEND

MysqL应用这个过程比较简单.

MysqL应用在上面的小例子中我们看到在创建存储过程之前使用了delimiter //;,创建完成之后又再次 使用了命令 delimiter ;.

MysqL应用delimiter 是界定符,我们知道,在MySQL命令行客户端,是通过分号(;)来界定一个命令是否完成的.在存储过程中,我们会多次使用到分号,但是这并不代表命令的结束,所以说我们需要使用delimiter命令来改变这个界定符.

MysqL应用MysqL> delimiter //;  改变界定符为 //MysqL> delimiter ; 重新改变界定符为分号

MysqL应用所以说我们如果使用MySQL命令行创建存储过程的话,我们必须在创建存储过程之前使用上述命令改变界定符.

MysqL应用接下来我们看到procedure_name()中的IN/OUT/INOUT,这是代表什么意思呢?

MysqL应用一个IN类型的参数会传递一个值到存储哦过程中,也就是我们在编程语言中自定义函数的参数.如果参数前面没有指定是IN/OUT/INOUT,那默认会是IN,看下面的例子:

MysqL应用MysqL>delimiter //MysqL> create procedure in_proced(IN param VARCHAR(100))      -->begin      -->insert into proced(name,type) values(param,'onmpw');      -->end      -->//MysqL>delimiter ;MysqL> call in_proced(‘onmpw.com');

MysqL应用这就是在参数前指定IN的含义.

MysqL应用下面我们看OUT,指定为OUT的参数将从存储过程中传递一个值给调用者,也就是说,OUT可以认为这个参数就是我们自定义函数中的返回值.

MysqL应用MysqL> delimiter //MysqL> create procedure out_proced(OUT param INT)     -->begin     -->select count(*) into param from proced;     -->end     -->//MysqL>delimiter ;MysqL> call out_proced(@a);MysqL>select @a;+------+| @a |+------+| 3   |+------+

MysqL应用最后就是INOUT,很明显INOUT指定的参数被调用者初始化,其值在存储过程中可以被修改,并且任何改变对于调用者来说都是可见的.

MysqL应用看下面的例子:

MysqL应用MysqL> delimiter //MysqL> create procedure inout_proced(INOUT param INT)     --> begin     --> select count(*) into param from proced where ID>param;     --> end     -->//MysqL>delimiter ;MysqL>set @a = 3;MysqL>call inout_proced(@a);MysqL>select @a; 查看变量的值是否改变

MysqL应用以上就是创建一个简单的存储过程的方式.

MysqL应用删除存储过程

MysqL应用删除存储过程的语法:

MysqL应用DROP PROCEDURE IF EXISTS procedure_name

MysqL应用下面是使用实例:

MysqL应用MysqL>drop procedure if exists proced;

MysqL应用修改存储过程

MysqL应用存储过程的修改时不能改变存储过程内的SQL语句的,只能改变其属性,其语法如下:

MysqL应用ALTER PROCEDURE proc_name [characteristic ...]characteristic:  COMMENT 'string'  | LANGUAGE sql  | { CONTAINS sql | NO sql | READS sql DATA | MODIFIES sql DATA }  | sql Security { defineR | INVOKER }

MysqL应用总结:无论是删除存储过程还是修改存储过程,必须保证你要修改或者删除存储过程没有被其他存储过程使用,例如你有存储过程A,和存储过程B.A在B中被使用,如果我们想修改A或者删除A,必须确保B中不再使用A,否则如果我们删除A以后,再调用B的时候就会报错.

MysqL应用举个例子:

MysqL应用MysqL>delimiter //MysqL>create procedure A(IN pa1 INT,OUT pa2 INT)     -->begin     -->select count(*) into pa2 from proced where ID>pa1;     -->end     -->//MysqL>create procedure B(INOUT pa INT)     -->begin     -->declare v int;     -->call A(pa,v);     -->set pa = v;     -->end     -->//MysqL>delimiter ;MysqL>drop procedure A;MysqL>set @a=5;MysqL>call B(@a);ERROR 1305 (42000): PROCEDURE test.A does not exists

MysqL应用以上就是对存储过程简单的介绍,希望对大家学习MysqL存储过程有所赞助.

《MysqL必读窥探MysqL存储过程细节》是否对您有启发,欢迎查看更多与《MysqL必读窥探MysqL存储过程细节》相关教程,学精学透。内存溢出PHP学院为您提供精彩教程。

总结

以上是内存溢出为你收集整理的Mysql必读窥探mysql存储过程细节全部内容,希望文章能够帮你解决Mysql必读窥探mysql存储过程细节所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1154033.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存