加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql应用MySQL存储过程笔记

发布时间:2020-12-12 02:43:58 所属栏目:MySql教程 来源:网络整理
导读:《Mysql应用MySQL存储过程笔记》要点: 本文介绍了Mysql应用MySQL存储过程笔记,希望对您有用。如果有疑问,可以联系我们。 导读:1,创建实例数据库create database db5; use db5;2,创建一个简单的工作表,并插入数据create table t(s1 int); insert into t v

《Mysql应用MySQL存储过程笔记》要点:
本文介绍了Mysql应用MySQL存储过程笔记,希望对您有用。如果有疑问,可以联系我们。

导读:1,创建实例数据库 create database db5; use db5;2,创建一个简单的工作表,并插入数据 create table t(s1 int); insert into t v...

1,创建实例数据库
??MYSQL教程

create database db5;
?? use db5;
?

2,并插入数据
??MYSQL教程

create table t(s1 int);
?? insert into t values(5);
?

3,创建程序实例
?MYSQL教程

?? create procedure p1() select * from t;

????? SQL语句存储过程的第一部分是 create procedure
????? 第二部分是过程名:上面新存储过程的名字是p1.
????? 第三部分书参数列表(),第四部分是程序的主体,“select * from t”
*****什么样的MySQL语句在存储过程体中是合法的?
?????? 在存储过程体中可以包含所有的合法SQL数据库定义语言,insert,update,delete,drop,create,replace等等语句
包括(set,commit,rollback)但是,在代码中如果包含MYSQL的扩充功能,那么代码将不能移植.
???
4,调用存储过程,所需要输入的就是call和你过程名以及一个括号.
??? call p1();
5,过程中的特征子句
??MYSQL教程

? create procedure p2()
??? language SQL
???? NOT DETERMINISTIC
??? SQL SECURITY DEFINER
??? COMMENT ''
???? select current_date,rand() from t;
?

反映存储过程特性的子句.子句内容在括号之后,主体之前.这些子句都是可选的,他们有什么作用呢
LANGUAGE SQL子句是没有作用的.仅仅是为了说明下面过程的主体使用SQL语言编写.这条是系统默认的,但你在这里声明是有用的,因为某些DBMS(IBM的DB2)需要它,如果你关注DB2的兼容问题最好还是用上.此外,今后可能会出现除SQL外的其他语言支持的存储过程
NOT DETERMINISTIC,是传递给系统的信息.这里一个确定过程的定义就是那些每次输入一样输出也一样的程序
SQL SECURITY,可以定义为SQL SECURITY DEFINER或SQL SECURITY
INVOKER. 这就进入了权限控制的领域了,SQL SECURITY DEFINER意味着在调用时检查创建过程用户的权限(另一个选项是SQL SECURITY INVOKER). 在而言,使用SQL SECURITY DEFINER指令告诉MySQL服务器检查创建过程的用户就可 以了,当过程已经被调用,就不检查执行调用过程的用户了.而另一个选项(INVOKER)
则是告诉服务器在这一步仍然要检查调用者的权限.MYSQL教程

6,Parameters参数
??MYSQL教程

? create procedure p5()------; //参数列表是空的
??? create procedure p5([IN] name data-type)---- //输入参数in可选,默认为参数为in
??? create procedure p5(out name data-type)----- //输出参数out
??? create procedure p5(inout 那么data-type)----- //即可以做输入参数也可以做输出参数
?? ----输入参数in 例子.
?????? create procedure p5(p int) set @x=p;
?????? call p5(12345);
?????? select @x;
?? ----输出参数out 例子
?????? create procedure p6(out p int)set p=-5;
?????? call p6(@y);
?????? select @y;
?

7,复合语句:如果你的过程中有多条语句,那么你需要begin/end块.在这里你可以进行变量的定义和流程的控制
?????? 首先执行命令MYSQL教程

delimiter //
?????? create procedure p7()
?????????? BEGIN
????????????? set? @a=6;
?????? set? @b=5;
?????? insert into t values (@a);
?????? select s1 * @a from t where s1>= @b;
??? END;//
?? -----在复合语句中申明变量
?????? create procedure p8()
??????????? begin
?????? DECLARE a INT;
?????? DECLARE b INT;
?????? SET a=5;
?????? SET b=5;
?????? insert into t values (a);
?????? select s1*a from t where s1>=b;
??????????? end;//
?????? 含有default默认语句舌设定语句的例子
?????? create procedure p9()
?????? begin
????????? declare a,b int default 5;
?? insert into t values(a);
?? select s1*a from t where s1>=b;
?????? end;//
?

8,scope作用域的问题:内部的变量在其作用域范围内享有更高的优先权,当执行到end变量时,内部变量消失,此时已经在其作用域外,变量不再可见了,应为在存储
?过程外再也不能找到这个申明的变量,但是你可以通过out参数或者将其值指派给会话变量来保存其值.
??MYSQL教程

create procedure p11()
?? begin
????? declare x1 char(5) default 'outer';
????? begin
??????? declare x1 char(5) default 'inner';
?select x1;
????? end;
????? select x1;
?? end;//
??
/*******? 存储过程中的条件式语句? ***********/
1. if-then -else语句
??? create procedure p12(in parameter int)
??? begin
????? declare var int;
????? set var=parameter+1;
????? if var=0 then
??????? insert into t values(17);
????? end if;
????? if parameter=0 then
??????? update t set s1=s1+1;
????? else
??????? update t set s1=s1+2;
????? end if;
??? end;//
?

2. case指令:如果需要进行更多条件真假的判断我们可以使用case语句
??MYSQL教程

create procedure p13(in parameter int)
??? begin
?????? declare var int;
?????? set var=parameter+1;
?????? case var
???????? when 0 then insert into t values(17);
? when 1 then insert into t values(18);
? else insert into t values(19);
?????? end case;
??? end;//
?

/*********? 循环语句? ***********/
1. while ···· end while; 循环语句
?MYSQL教程

? create procedure p14()
?? begin
???? declare var int;
???? set var=0;
???? while var<6 do
??????? insert into t values(var);
?set var=var+1;
???? end while;
?? end;//
?

欢迎参与《Mysql应用MySQL存储过程笔记》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读