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获取随机数(MySQL 生成随机数字、字符串、日期、验证码及 UUID的方法)
- win10安装mysql8.0如何启动(win10下mysql 8.0.23 安装配置方法图文教程)
- mysql批量生成uuid(一种简单的ID生成策略: Mysql表生成全局唯一ID的实现)
- mysql不兼容问题(解决mysql 组合AND和OR带来的问题)
- mysqlcount使用技巧(MySQL巧用sum、case和when优化统计查询)
- mysql效率查询(MySQL 如何分析查询性能)
- mysql对大表千万级如何优化(MySQL 大表的count优化实现)
- centos7怎么安装mysql(Centos7 mysql数据库安装及配置实现教程)
- 数据库mysql基本知识(深入理解r2dbc在mysql中的使用)
- mysql的复制原理(浅析MySQL的WriteSet并行复制)
- mysql语句详解(详解记录MySQL中lower_case_table_names的坑)
- mysql的索引及其介绍总结(浅析MysQL B-Tree 索引)
- mysql一主两从架构(MySQL主从搭建多主一从的实现思路与步骤)
- mysql多行数据之和(详解MySQL的数据行和行溢出机制)
- mysql权限管理详解(Mysql 用户权限管理实现)
- mysql添加注释视图(mysql创建表添加字段注释的实现方法)
- 富士胶片集团将向土耳其东南部地震灾民捐赠5000万日元 | 美通社(富士胶片集团将向土耳其东南部地震灾民捐赠5000万日元)
- 二次创业 的富士胶片,在进博会上首次展示完成转型后的全线医疗产品(二次创业的富士胶片)
- 富士胶片 中国 我们对上海的信心没有任何改变(富士胶片中国)
- 赢麻了 富士公布2021年度财报 营利同比增长240(富士公布2021年度财报)
- 医事文化谈屑 | 古人的名 字 号(医事文化谈屑古人的名)
- ()
热门推荐
- Ext.DomHelper用法
- vue引用js库报错(Vue插件报错:Vue.js is detected on this page.问题解决)
- sql server中随机函数(SQL SERVER 2012新增函数之逻辑函数IIF)
- python中字典的主要特点(Python里字典的基本用法包括嵌套字典)
- 什么是依赖倒置原则
- php 十六进制转换为二进制(PHP实现的62进制转10进制,10进制转62进制函数示例)
- 自建FTP服务器并远程外网访问,花生棒自带端口映射3步搞定(自建FTP服务器并远程外网访问,花生棒自带端口映射3步搞定)
- python中dict怎么创建(Python数据类型之Dict字典实例详解)
- docker怎么设置远程访问(Docker开启远程访问的实现方式)
- extjs anchor 锚点布局