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

1.函数

CREATE DEFINER=`april_admin`@`%` FUNCTION `my_func`() 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 时,则需要执行者有调用权限并且有引用的相关对象的权限,才能成功执行。

上一篇:用Python制作学生管理系统


下一篇:javascript代码重构