MySQL自定义函数
MySQL自定义函数
MySQL自定义函数MySQL自定义函数能返回字符串,整数或实数;可以定义一次作用于一行的简单函数,或作用于多行的组的集合函数
一、创建自定义函数
CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL} BEGIN //函数实现的语句 END;
参数说明
1、aggregate 指定创建的函数是普通的自定义函数,还是AGGREGATE函数。
2、function_name 是用在SQL声明中以备调用的函数名字。
3、RETURNS 说明函数返回值的类型。
实例
mysql> delimiter //
mysql> create function fun_add_rand(
-> in_int int
-> )
-> RETURNS int
-> BEGIN
-> declare i_rand int;
-> declare i_return int;
->
-> set i_rand=floor(rand()*100);
-> set i_return = in_int + i_rand;
->
-> return i_return;
-> END;
-> //
mysql> delimiter ;
delimiter $$
/* 参数为 int类型 */
create function rand_string(n INT)
/*设置返回值类型 为字符串*/
returns varchar(255)
/* 函数开始 */
begin
/* 的定义局部变量,有默认值*/
declare chars_str varchar(100) default
'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
/*在定义空变量*/
declare return_str varchar(255) default '';
/* 定义整型 值为 0*/
declare i int default 0;
/* 循环 */
while i < n do
/* 制作随机字符串*/
set return_str =concat(return_str,substring(chars_str,floor(1+rand()*52),1));
set i = i + 1;
/* 结束循环 */
end while;
/* 返回制作的随机字符串*/
return return_str;
end $$
delimiter ;
二、使用自定义函数
以上示例函数的使用
mysql> select id from test_inn;
+------+
| id |
+------+
| 1 |
| 1 |
| 1 |
| 1 |
+------+
mysql> select fun_add_rand(id) from test_inn;
+------------------+
| fun_add_rand(id) |
+------------------+
| 91 |
| 34 |
| 93 |
| 66 |
+------------------+
2、rand_string自定义函数
select rand_string(5);
三、删除自定义函数
语法
DROP FUNCTION [ IF EXISTS ] function_name;
例如
mysql> drop function if exists fun_add_rand;
四、查看自定义函数创建信息
语法
SHOW CREATE FUNTION function_name;
五、在MySQL创建用户自定义函数时,报以下错误
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
这是因为有一个安全参数没有开启,log_bin_trust_function_creators 默认为0,是不允许function的同步的,开启这个参数,就可以创建成功了。
mysql> show variables like '%fun%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF |
+---------------------------------+-------+
1 row in set (0.00 sec)
mysql> set global log_bin_trust_function_creators=1;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%fun%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | ON |
+---------------------------------+-------+
1 row in set (0.00 sec)
- mysql和navicat怎么用(如何用Navicat操作MySQL)
- mysql索引的比较规则(MySQL的Flush-List和脏页的落盘机制)
- ubuntu下mysql安装教程(Ubuntu 20.04 安装和配置MySql5.7的详细教程)
- mysql忽略大小写(MySQL大小写敏感的注意事项)
- mysql 死锁原因(MySQL锁等待与死锁问题分析)
- MySQL批量执行SQL脚本文件
- mysql快速备份数据(如何使用Maxwell实时同步mysql数据)
- mysqlexplain各个字段作用(MySQL EXPLAIN语句的使用示例)
- navicat配置远程访问mysql(解决Navicat无法连接 VMware中Centos系统中的 MySQL服务器的问题)
- mysql数据库简单操作(一篇文章教会你进行MySQL数据库和数据表的基本操作)
- mysql8.0中如何导入数据(mysql8.0.20数据目录迁移的方法)
- mysql 8.0.22 winx64安装配置方法图文教程(mysql 8.0.22 winx64安装配置方法图文教程)
- phpstudy的mysql无法启动(Windows系统下解决PhPStudy MySQL启动失败问题)
- mysql连接navicat报错1045(Navicat 连接MySQL8.0.11出现2059错误)
- linuxmysql怎么设置root密码(Linux mysql-5.6如何实现重置root密码)
- mysql存储过程定义表(MySQL存储过程的创建、调用与管理详解)
- 阿里最新财报公布 三季度营收增长3 ,将增加150亿美元回购额度 在美股价小涨(阿里最新财报公布)
- 赵薇时胖时瘦 最近变美少女 原因在这里 躺着就变瘦(赵薇时胖时瘦最近变美)
- 学会这26种姿势,你就可以和兵哥哥切磋了(你就可以和兵哥哥切磋了)
- 吴彦祖陈冠希 恩怨 ,失去曾让他流泪的女友,终遇走过18年真爱(吴彦祖陈冠希恩怨)
- 痴情男神 吴彦祖 与妻子恋爱8年,结婚10年,家庭幸福美满(痴情男神吴彦祖)
- 成功破圈,小牛电动SQi强势开 跨(小牛电动SQi强势开)
热门推荐
- 如何设置虚拟主机(虚拟主机空间怎么选择?)
- dedecms悬浮导航(DEDECMS开启绝对地址PC端跳转到静态手机端实现方法)
- mysqldecimal类型数据转换(mysql decimal数据类型转换的实现)
- 服务器宝塔面板怎么安装(VPS安装宝塔面板+云锁过程记录)
- php 会话session实现用户登录功能(PHP cookie,session的使用与用户自动登录功能实现方法分析)
- linq中延迟执行
- opencv 图像匹配python(OpenCV+Python识别车牌和字符分割的实现)
- mysqlreplace用法(细说mysql replace into用法)
- mysql8.0设置root密码(MySQL8.0.23版本的root密码重置最优解法)
- input的autocomplete="off"属性
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9