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)
- 执行mysqldump命令后数据库无反应(关于xampp启动不了mysql数据库的解决方法)
- navicat怎么和mysql连接(Navicat Premium远程连接MySQL数据库的方法)
- mysql带log的版本(聊聊MYSQL中Redo Log是什么?)
- mysql定期备份(Mysql5.7定时备份的实现)
- 2021-10-18 11:58:15
- mysql如何定义外键(MySQL外键设置的方法实例)
- mysql触发器语法规则(MySQL 触发器的使用及需要注意的地方)
- mysql数据库触发器(MySQL中使用游标触发器的方法)
- mysql怎么建立主键外键(mysql 实现设置多个主键的操作)
- 怎么运行xampp中的mysql(本地安装了mysql导致xampp的mysql服务启动失败)
- mac更改mysql密码(Mac下mysql 8.0.22 找回密码的方法)
- mysql慢日志查询作用(MySQL 慢查询日志的开启与配置)
- mysql查询count很慢(MySQL COUNT函数的使用与优化)
- mysql的复制原理(浅析MySQL的WriteSet并行复制)
- mysql必知必会索引(MySQL索引知识的一些小妙招总结)
- mysql主键为什么用varchar(Mysql中varchar类型一些需要注意的地方)
- 今天要穿什么颜色(今天要穿什么颜色的衣服最吉利)
- 一道高中题-求杯子的高度(一道高中题-求杯子的高度)
- 网坛停摆三巨头亏损惨重,费德勒跌幅88 纳达少赚2400万(网坛停摆三巨头亏损惨重)
- Beyond 版本《无人深空》主线任务攻略 阿特拉斯之道(版本无人深空主线任务攻略)
- 全球科技界最有钱大佬TOP 15 你知道几位(全球科技界最有钱大佬TOP)
- 2主力后腰缺阵 泰山队奇兵有望获重用,赛季0出场,迎来中超首秀(泰山队奇兵有望获重用)
热门推荐
- idea怎样连接mysql(IDEA配置连接MYSQL数据库遇到Failed这个问题解决)
- python datetime模块是什么(Python中时间datetime的处理与转换用法总结)
- python删除list的指定元素(Python list列表中删除多个重复元素操作示例)
- 写出好代码的几个建议
- html5播放代码(html5 video全屏播放/自动播放的实现示例)
- django部署(Django 中间键和上下文处理器的使用)
- 微信小程序css使用技巧(微信小程序 CSS filter滤镜的使用示例详解)
- nginx日志请求状态(Nginx设置日志打印post请求参数的方法)
- 已授权和未授权(提示您未被授权查看该页怎么解决?)
- python怎么导入beautifulsoup元素(python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9