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 时,则需要执行者有调用权限并且有引用的相关对象的权限,才能成功执行。