⚠不推荐将业务逻辑存储在数据库中.

MySQL不仅提供了很多很方便的内置函数,用户还可以自定义函数。
不同于MongoDB对Js函数的良好支持,MySQL的自定义函数用起来感觉处处掣肘,不推荐用来处理复杂的业务逻辑。
MySQL自定义函数默认是和库进行绑定的。

增:

CREATE[DEFINER = user]FUNCTION [IF NOT EXISTS] sp_name ([func_parameter[,...]])RETURNS type[characteristic ...] routine_bodyfunc_parameter:param_name typetype:Any valid MySQL data typecharacteristic: {COMMENT 'string'| LANGUAGE SQL| [NOT] DETERMINISTIC| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }| SQL SECURITY { DEFINER | INVOKER }
}routine_body:Valid SQL routine statement

[创建过程和创建函数语句](https://dev.mysql.com/doc/refman/8.0/en/create-procedure.html "创建过程和创建函数语句")

删:

DROP FUNCTION [IF EXISTS] sp_name

改:

ALTER FUNCTION func_name [characteristic ...]characteristic: {COMMENT 'string'| LANGUAGE SQL| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }| SQL SECURITY { DEFINER | INVOKER }
}

此语句可用于更改 存储函数。可以在ALTER FUNCTION语句中指定多个更改。然而 不能更改存储函数的参数或主体 使用此语句;要进行此类更改,您必须删除 使用 DROP 重新创建函数 函数和创建 功能。

查:

show function status [like functionName];show create function functionName;

使用实例1——姓名混淆:

createfunction changeName(name varchar(255),salt int)returns varchar(255)reads sql databegin-- 返回姓名declare newName varchar(255) default '';declare i,j,coded int default 1;-- 姓氏declare family_str varchar(334) default '赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯昝管卢莫经房裘缪干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀羊於惠甄曲家封芮羿储靳汲邴糜松井段富巫乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭厉戎祖武符刘景詹束龙叶幸司韶郜黎蓟薄印宿白怀蒲邰从鄂索咸籍赖卓蔺屠蒙池乔阴胥能苍双闻莘党翟谭贡劳逄姬申扶堵冉宰郦雍郤璩桑桂濮牛寿通边扈燕冀郏浦尚农温别庄晏柴瞿阎充师巩厍聂晁勾敖融';-- 名declare name_str varchar(354) default '建秀军秀英维君勇丽伟静欧文伟静涛婷浩宇欣怡建华桂英勇桂英景逸军艳磊丽熹祎超婷浩欣怡国浩然梓涵国华秀兰伟英伟敏勇娟涛英敏杰婷婷宇轩诗涵和平玉兰建国玉兰强芳涛艳杰婷婷鑫静子轩梓置明桂兰建华萍刚静超燕鹏丹俊杰悦宇航子涵建平秀珍建军秀兰建军霞强敏磊雪磊敏皓轩紫涵军凤英平玉梅涛红梅鹏娜强丽帅佳子豪佳怡平玉珍建平红斌燕军芳浩梓子宇辰宸泽嘉欣佳奕轩晨涵思诺雨语睿文妍安博怡依浩沐铭诗珥俊然彤乐皓琪瑶悦艺桐熙煜一诺依诺欣怡梓涵语桐欣妍可欣语汐雨桐梦瑶阳锦伊昕恩可奕辰宇轩浩宇亦辰宇辰子墨宇航浩然梓豪亦宸若菅倩宇雪浩轩雨涵志明玉英强丽波红波丹鑫艳浩然颖俊杰雨欣德明兰英斌敏辉英杰玲帅娟鹏雨欣子涵一诺一子之川山士久冉羽弋千天月丹可宜雨欣淇晓海涛滨琪琦豪杰轩延杉平雪怡姗涵婷桐佳嘉诗雅菲绮韵舒熙瑜毓煜楠涵函洛珞博凯斯遥睿琳彤婕妤';declare oneCode varchar(4);-- 英文名不修改   length() 函数,一个汉字长度为3if(length(name) = char_length(name)) thenset newName = name;else-- 进行混淆,先使用base64编码将一个汉字分为4个字符while i <= char_length(name) doset oneCode = to_base64(substring(name,i,1));set coded = 0;set j = 1;while j <= char_length(oneCode) do-- 对每个字符取ascii码,错位相加进行混淆;适当取余,防止溢出set coded = (coded * pow(10,i) + ascii(substring(oneCode,j))) % 10000;set j = j + 1;end while;-- 使用盐值进行错位set coded = abs((coded - salt));if(i = 1) thenset newName = concat(newName,substring(family_str,coded % char_length(family_str) + 1,1));elseset newName = concat(newName,substring(name_str,coded % char_length(name_str) + 1,1));end if;set i = i + 1;end while;end if;return newname;
end;

使用实例2——混淆电话号码

createfunction changePhone(phone varchar(50),salt int)returns varchar(50)
reads sql data
begin-- 返回号码declare newPhone varchar(50) default '';declare oneCode varchar(5);-- 非私人号码不修改if(length(phone) < 6) thenset newPhone = phone;else-- 进行混淆,原号码后5位的自然对数与盐值的弧度值相加set oneCode = substring_index(truncate(ln(right(phone,5)) + radians(salt),5),'.',-1);set newPhone = concat(left(phone,char_length(phone)-5),oneCode);--  弥补数字和字符转换时,0的丢失while length(phone) > length(newPhone) doset newPhone = concat(newPhone,0);end while;end if;return newPhone;
end;

MySQL自定义函数相关推荐

  1. mysql自定义函数应用_mysql functions实例:在自定义函数中应用字符串函数

    分享一段mysql自定义函数的代码,在其中用到了mysql的字符串函数length. 代码: mysql> delimiter $$ mysql> CREATE FUNCTION myFu ...

  2. 数据库系列之mysql 自定义函数function,函数和存储过程的区别

    mysql 自定义函数function,函数和存储过程的区别 https://blog.csdn.net/u010365819/article/details/80470448 https://blo ...

  3. mysql 自定义函数function,函数和存储过程的区别

    From: https://blog.csdn.net/u010365819/article/details/80470448 1.MySQL自定义函数简介 在MySQL中使用自定义函数也需要相应的要 ...

  4. mysql 自定义函数教程_MySQL自定义函数

    MySQL自定义函数 函数与存储过程类似,也是一组预先编译好的SQL语句的集合,但是存储过程可以有0个或多个返回,函数就只能有一个返回 创建函数 #语法 参数列表包含两部分 参数名和参数类型 #函数体 ...

  5. MySQL自定义函数(四十六)

    MySQL自定义函数 一.什么是MYSQL自定义函数? mysql当中的自定义函数,我们简称为UDF,它实际上是一种对MySQL扩展的途径,其用法与内置函数相同. 二.自定义函数应该具备哪些条件? 我 ...

  6. mysql 自定义函数教程_Mysql 自定义函数

    Mysql 自定义函数怎么用 CREATE FUNCTION `strip_tags`($str text) RETURNS text BEGIN DECLARE $start, $end INT D ...

  7. MySQL自定义函数创建与使用总结

    MySQL自定义函数创建与使用总结 MySQL自定义函数和存储过程类似,也需要在数据库中创建并保存.它与存储过程一样,都是由SQL语句和控制语句组成的代码片段,可以被应用程序和其他SQL语句调用. M ...

  8. mysql自定义函数示例代码,以及属性介绍

    以下是一个MySQL自定义函数的示例代码,该函数实现了将指定字符串中的大写字母转换为小写字母的功能: DELIMITER $$ CREATE FUNCTION to_lower(str VARCHAR ...

  9. MySQL自定义函数的使用及MySQL中的流程控制语句

    MySQL自定义函数 文章目录 MySQL自定义函数 创建自定义函数 自定义函数的调用 自定义函数的删除 自定义函数的维护 流程控制语句 条件控制语句 循环语句 创建自定义函数 创建自定义函数时, 开 ...

  10. mysql自定义函数实现

    mysql自定义函数实现 环境准备 查看mysql版本 select version(); 查看mysql存储引擎 show variables like '%storage_engine%'; 创建 ...

最新文章

  1. 帝国cms 标签php,帝国cms常用标签总结
  2. 如何:重写 ToString 方法(C# 编程指南)
  3. 离职 10 天,仅面了 4 家公司,我的感受。。。
  4. 提搞网站访问速度可做哪些优化
  5. 软件测试测试 python_Python测试简介
  6. oracle表段是什么,【DB笔试面试274】在Oracle中,什么是延迟段创建(Deferred Segment Crea......
  7. Echarts图的属性大全,学会绝对可以把Echarts吃的透透的
  8. ASP.NET的属性绑定、表达式绑定、集合绑定、方法绑定、DropDownList集合绑定、DataList绑定、GridView绑定
  9. Java ME游戏编程_Java ME游戏编程(第2版)
  10. 从零开始学习makefile(7) makefile的filter的作用
  11. 【Arduino实验14 红外遥控】
  12. JQuery checkbox check/uncheck
  13. Hive函数详解(中文)
  14. Python 求解超越方程
  15. Lambert (兰伯特)光照模型
  16. LR参数化,参数化类型:Fille类型--2列多个参数
  17. input文本框--去首尾空格
  18. 计算机网络宽带越大 网速越快,100M宽带, 网速却很慢, 测速只有60M? 一分钟学会解决办法...
  19. Win7环境安装Anaconda
  20. 取中文拼音首字母,提供了多音字的选择 js javascript c# java 存储过程

热门文章

  1. Fresco 使用要点(不定期更新)
  2. linux环境下安装cwp的地震专业软件su
  3. mac os模拟器linux,获取Mac OS 8模拟器并重新体验Macintosh 90s
  4. 以“掌上东航”为例,论混合开发在企业级项目中的实践
  5. Android编程简介
  6. 玩转Linux与运维岗(21)
  7. 音频开发_Microphone Array Beamforming_Fractional Delays
  8. python3 录屏
  9. OSChina 周一乱弹 —— 妮儿还是把上衣穿上吧
  10. win10下使用Linux(ubuntu18.04)