ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
**1. 定义函数** ```sql # 定义函数的语法 CREATE FUNCTION fun_name(param_name param_type, ...) RETURNS type_ [COMMENT 'string'] [LANGUAGE SQL] [DETERMINISTIC | NOT DETERMINISTIC] [CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA] [SQL SECURITY {DEFINER | INVOKER}] BEGIN -- 业务逻辑代码 RETURN value_; END; - fun_name:自定义的函数名称,建议避免与MySQL中的函数重名 - COMMENT'string':用于对存储过程的描述,其中string为描述内容,comment为关键字 - LANGUAGE SQL:指明编写这个存储过程的语言为SQL语言 - DETERMINISTIC:表示存储过程对同样的输入参数产生相同的结果 - NOT DETERMINISTIC:表示存储过程对同样的输入参数产生不相同的结果(默认) - CONTAINS SQL:表示存储过程包含读或写数据的SQL语句(默认) - NO SQL:表示存储过程不包含任何SQL语句 - READS SQL DATA:表示存储过程只包含读数据的SQL语句 - MODIFIES SQL DATA:表示存储过程只包含写数据的SQL语句 - SQL SECURITY:表示存储过程的调用是用存储过程的定义者的许可(definer,默认)来执行, 还是用调用者的许可(invoker)来执行 ``` ```sql # 案例演示准备数据 drop table if exists `user`; create table `user`( `id` int(11) primary key not null auto_increment, `username` varchar(255) not null, `password` varchar(255) not null )engine=INNODB default charset=utf8; # 创建函数 delimiter $ create function fun_user(uname varchar(255), pass varchar(255)) returns int begin -- 声明一个局部变量 declare result int default 0; insert into `user`(`username`, `password`) values(uname, pass); -- 给变量赋值 set result = 1; return result; end $ # 调用函数 mysql> select fun_user('张三', 'zhangsan') $ +--------------------------------+ | fun_user('张三', 'zhangsan') | +--------------------------------+ | 1 | +--------------------------------+ mysql> select * from user; +----+----------+----------+ | id | username | password | +----+----------+----------+ | 1 | 张三 | zhangsan | +----+----------+----------+ ``` **2. 调用函数** ```sql select fun_name(params_list); ``` **3. 查看函数** ```sql (1)查看数据库 learn_mysql 下有哪些函数 # 建议全部大写 mysql> SELECT SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES -> WHERE ROUTINE_SCHEMA = 'LEARN_MYSQL' AND ROUTINE_TYPE = 'FUNCTION'; +---------------+ | SPECIFIC_NAME | +---------------+ | fun_user | +---------------+ (2)查看函数基本信息 mysql> show function status like 'fun_user'; ... +-------------+----------+----------+----------------+---... | Db | Name | Type | Definer | Modified ... +-------------+----------+----------+----------------+---... | learn_mysql | fun_user | FUNCTION | root@localhost | 20... +-------------+----------+----------+----------------+---... (3)查看函数定义信息 mysql> show create function fun_user; +----------+...--------------------------------------+-... | Function | ... | Create Function ... +----------+...--------------------------------------+-... | fun_user | ... | CREATE DEFINER=`root`@`localhost` FUNCTION `fun_user`(uname varchar(255), pass varchar(255)) RETURNS int DETERMINISTIC begin declare result int default 0; insert into `user`(`username`, `password`) values(uname, pass); set result = 1; return result; end | ... | +----------+-------------------------------------------... ``` **4. 删除函数** ```sql drop function [if exists] fun_name; ``` **5. 修改函数** ```sql # 只能修改函数的特征 # 如果要修改参数列表或begin...end,只能删除重新定义 ALTER FUNCTION process_name [COMMENT 'string'] [LANGUAGE SQL] [DETERMINISTIC | NOT DETERMINISTIC] [CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA] [SQL SECURITY {DEFINER | INVOKER}] ```