MySql-函数、存储过程、触发器

1.函数

语法

CREATE  
[DEFINER = { user | CURRENT_USER }]
FUNCTION functionName ( varName varType [, ... ] )
RETURNS returnVarType
[characteristic ...] 
routine_body

functionName:函数名,同MySQL内置函数一样,大小写不敏感

varName: 形参名

varType: 形参类型,其与varName配对使用。形参数量不限( $\geq 0$)

returnVarType: 返回值类型。函数必须有且只能有一个返回值

characteristic:函数特性

routine_body:函数体。函数体中必须含有 return 语句,当函数体为复合结构时,需要使用begin ... end 语句

CREATE DEFINER=`april_admin`@`%` FUNCTION `my_func`(num1 int, num2 int) RETURNS int(11)
BEGIN
	#Routine body goes here...
	INSERT INTO student (`name`) VALUES ("名字");

	RETURN 0;
END

函数必须有返回值

2.存储过程

CREATE DEFINER=`april_admin`@`%` PROCEDURE `insert_student`()
BEGIN
	#Routine body goes here...

-- INSERT INTO student (`name`) VALUES ("名字");
SELECT my_func();

END

3.DEFINER

定义者

definer 翻译成中文是“定义者”的意思。MySQL中,创建视图(view)、函数(function)、存储过程(procedure)、触发器(trigger)、事件(event)时,都可以指定 DEFINER = user 选项,即指定此对象的定义者是谁,若不显式指定,则创建此对象的用户就是定义者

对于视图、函数及存储过程,还可以指定 SQL SECURITY 属性,其值可以为 DEFINER(定义者) 或 INVOKER(调用者),表示在执行过程中,使用谁的权限来执行。DEFINER 表示按定义者拥有的权限来执行,INVOKER 表示用调用者的权限来执行。

默认情况下,SQL SECURITY 属性为 DEFINER 。其值为 DEFINER 时,数据库中必须存在 DEFINER 指定的定义者用户,并且该定义者用户拥有对应的操作权限及引用的相关对象的权限,执行者只需拥有调用权限就能成功执行。当 SQL SECURITY 属性为 INVOKER 时,则需要执行者有调用权限并且有引用的相关对象的权限,才能成功执行。

4.Navicat添加触发器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值