**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}]
```
- MySQL
- MySQL是什么
- MySQL环境搭建
- centos7-MySQL8
- windows-MySQL8
- 数据库软件
- sqlyog软件安装
- navicat软件安装
- powerDesigner软件安装
- RDBMS术语
- SQL语句组成
- 数据库系统组成
- 数据库操作
- 数据表操作
- 查询语句
- 基本语法
- 子查询
- 表连接
- 查询语句执行顺序
- 事务
- 事务是什么
- 事务的作用
- 事务的4个特性
- 事务隔离级别
- 事务的实现
- 索引
- 索引的作用
- 索引操作
- 存储引擎
- 备份与恢复
- 视图
- 视图是什么
- 视图的作用
- 创建视图
- 查看视图
- 更改视图
- DML操作视图
- 删除视图
- 存储过程与函数
- 过程与函数是什么
- 存储过程操作
- 定义存储过程
- 调用存储过程
- 查看存储过程
- 删除存储过程
- 修改存储过程
- 函数操作
- 过程与函数区别
- 流程控制
- if语句
- case语句
- while循环语句
- repeat循环语句
- loop循环语句
- 变量
- 处理程序
- 光标
- Redis
- 简介
- 下载与安装
- 命令操作redis数据库
- 通用命令
- 数据操作
- 持久化
- Windows上的持久化操作
- 数据库设计
- 数据库设计过程
- ER模型图
- MongoDB
- MongoDB是什么?
- MongoDB特性
- MongoDB 数据模型
- 安装MongoDB
- MongoDB认证
- Database操作
- Collection操作
- Document操作
- 插入
- 查询
- 更新
- 删除
- buckWrite
- MongoDB索引
- 副本集
- 聚焦分析
- 事务管理
- 写关注
- 读关注