MySql笔记(存储过程)
来源:互联网 发布:h3c 查看端口日志 编辑:程序博客网 时间:2024/05/16 15:51
存储过程是使用CALL语句来调用的独立操作,不能用在表达式里。定义为CREATE PROCEDURE ...
适用于存储过程的情况有两种:
- 只需通过运算来实现某种效果或动作,不需要返回值;
- 运算结果需要返回多个结果集(函数无法做到);
存储函数常用在表达式里,会执行计算并返回一个值。定义为CREATE FUNCTION ...
函数无法返回多个值。如果要实现返回多个值,有两种办法:
- 编写多个函数,在同一条语句里调用所有这些函数;
- 使用一个存储过程,通过它的OUT参数“返回”这些值。
触发器会在执行表的INSERT
、DELETE
、UPDATE
语句时被自动激活。触发器可被设置成在语句处理各行之前或之后激活。定义为CREATE TRIGGER
。
事件是一个与计划相关联的存储程序。计划会定义事件执行的时间或次数,并且还可以定义事件何时强制退出。定义为CREATE EVENT
。只有当事件调度器被设置为启动时,服务器才会执行事件:SET GLOBAL event_scheduler = ON;
。
如果要禁用某个事件,可以使用ALTER EVENT event_name DISABLE;
视图和存储程序安全性(DEFINER
和INVOKER
)
默认情况下,用户定义的视图/存储过程/函数的定义者都会是执行CREATE
语句的用户账户。而实际执行时,也会按该用户的权限来执行。举个例子,如果我用root定义了一个存储过程对某些表进行删除操作,这时候本来无权进行删除的用户A调用了这个存储过程,那么他同样可以实现删除操作——这显然不是我们希望的。
因此MySQL支持在定义以上程序时加入DEFINER
和INVOKER
信息。单独来说,DEFINER
意义并不大,它标识了定义者身份(默认情况下是CURRENT_USER()),但如果需要,可以手动将DEFINER
设置为其他值,比如明明是用户root使用CREATE
语句,但他可以用DEFINER='A'@'localhost'
来设置定义者为用户A。这样执行时讲按A的权限来执行(而不是root)。肯定有人要问,那如果用户A使用CREATE
语句定义程序,并且设置DEFINER='root'@'localhost'
那岂不是会按root权限执行?答案是:这样的CREATE一般会报错,因为需要对应用户的权限。
来看这样一段存储过程
CREATE DEFINER='xxx'@'localhost'PROCEDURE greetings()BEGIN SELECT CONCAT('hello,'CURRENT_USER());END;
这时候,无论使用CREATE
语句的是谁,结果显示的都是’hello, xxx@localhost’。
要想让每个用户使用自己的身份(权限)来执行程序,需要添加SQL SECURITY INVOKER
,如下:
CREATE DEFINER='xxx'@'localhost'PROCEDURE greetings()SQL SECURITY INVOKERBEGIN SELECT CONCAT('hello,'CURRENT_USER());END;
那么这时,无论xxx写的是谁,最后都会输出当前执行该过程的用户名称,如hello, root@localhost
。
- MySql笔记(存储过程)
- MySQL 存储过程笔记
- MySQL学习笔记(十五)存储过程
- Mysql自学笔记五(存储过程)
- Mysql必知必会(笔记)【存储过程】
- MySQL 存储过程学习笔记
- MySQL存储过程学习笔记
- MySQL存储过程学习笔记
- MySql存储过程学习笔记
- MySQL存储过程学习笔记
- mysql学习笔记:存储过程
- Mysql存储过程学习笔记
- mysql学习笔记:存储过程
- MySQL存储过程学习笔记
- 学习笔记:mysql存储过程
- Mysql 存储过程学习笔记
- MySQL存储过程学习笔记
- MySQL学习笔记8:MySQL存储过程(storage procedure)
- Unity_2D游戏对象的移动
- JS原生态瀑布流
- C#判断WEB服务器是否支持断点续传
- 嵌入式Linux学习笔记(一)
- Struts2简介与配置
- MySql笔记(存储过程)
- 使用第三方实现webService
- BufferedInputStream的使用
- netpref 性能测试
- FFmpeg的第一次约会
- Maven 组件来管理项目
- unity摄像机中clear flags属性介绍
- LeetCode-7-Reverse-Integer 水题
- 安装APK,提示“该安装包未包含任何证书”