MySQL存储程序

本文详细介绍了MySQL存储程序,包括存储过程、存储函数、触发器和事件。存储程序优点在于减少网络开销、封装复杂计算、提供错误处理和提高安全性。通过示例展示了如何编写和调用存储过程和函数,以及如何定义和管理触发器和事件。同时,文章讨论了存储程序的权限管理和安全性问题。
摘要由CSDN通过智能技术生成

1.什么是MySQL存储程序?

存放在MySQL服务器端,供重复使用的对象叫做存储程序。存储程序分为以下四种:

(1)存储过程:不直接返回一个计算结果,但可以用来完成一般的运算或是生成一个结果集并传递回客户端。

一条SQL语句如果比作一行java代码,存储过程就相当于一个java方法,可以包含许多SQL语句,进行更复杂的操作。

(2)存储函数:返回一个计算结果,该结果可以用在表达式里。

就相当于自定义MySQL函数一样,它的作用和MySQL函数类似,只不过需要我们自己去定义。

(3)触发器:与数据表相关联,当那个数据表被INSERT、DELETE或UPDATE语句修改时,触发器将自动执行。

如果表关联了触发器,当表数据有修改操作时,触发器将自动执行,至于做什么是自己定义的。

(4)事件:根据时间表在预定时刻自动执行。

 比如,可以自己定一个开始时间点,然后让它每隔指定的时间段重复做某些事情。

【###】存储例程(stored routine)又是什么?

指的是存储过程和存储函数两者。

2 .存储程序有那些优点

(1)存储程序对象的可执行部分可以用复合语句(可以包括 局部变量、代码块、循环、条件语句)来编写,对SQL语法进行了扩展。

(2)存储程序都保存在服务端,定义他们的代码只需要在创建它们的时候通过网络传递一次,而不是每次执行都要传递一次,大大减少了开销。

(3)把复杂的计算封装为程序单元,通过简单的程序单元的名字调用他们。

(4)可以把一组存储程序打包成一个“函数库”,供其他应用程序调用,让其他程序以相同的方式完成操作。

(5)提供了一种错误处理机制。

(6)可以提高数据库安全性,可以限制存储程序的访问权限。

3.最简单的存储程序

存储程序不一定非得用复合语句来写,一个存储程序可以只包含一条SQL语句。例如,下面这个存储过程:

CREATE PROCEDURE my_proc1() SELECT * FROM user;

【注意】要以分号(英文的分号)结束SQL语句。

调用上面的存储过程:

CALL my_proc1;
或
CALL my_proc1();

显示一个结果集(存储过程没有返回值)。

4.如何编写复合语句

上面说过,存储程序对象的可执行部分可以用复合语句来编写。但是如何编写复合语句呢,它的语法是怎么样的?

(1)复合语句的语法

【###】由 BEGIN 开头,END 结束。在其中可以写任意数量的SQL语句,从 BEGIN 到 END 构成了一个语句块。

因为BEGIN和END之间可以有多条SQL语句,那么问题就来了: 学过MySQL的都知道,通常一条MySQL语句是以分号结束的,然后你这样写:

CREATE PROCEDURE my_proc2()
BEGIN
    SELECT * FROM USER;
    SELECT * FROM TEST;
    ....
END;

然后就尴尬了,还没到END呢,第一个分号就给你结束了。结果就是一个存储过程被分号给五马分尸,第一句就变成了:

CREATE PROCEDURE my_proc1() BEGIN SELECT * FROM USER; 

这条语句当然变成什么都不是了,一执行就会报错,剩下的尸块就不管了...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值