前几天在开发一个系统,需要用到随机字符串,但是mysql的库函数有没有直接提供,就简单的利用现有的函数东拼西凑出随机字符串来.下面简单的说下实现当时.

1.简单粗暴.

select ..., substring(MD5(RAND()),floor(RAND()*26)+1,6) as rand_str .....

上诉示例产生的是:6位长度的随机字符串.

函数解释:

rand() :产生 0-1之间的小数,简称种子.rand()*25 产生的数 在 0- 25 之间,不包括25

floor(val): 生成最近接val的最大整数

md5() :对字符串进行Md5加密(单向),生成的字符串长度是32位。

substring(str,pos,len):截取字符串,第一个参数:待截取的字符串,第二个参数:开始的位置(这里有些不同,下标开始位置为1,可以试试下),第三个参数:截取的长度.

2.将方式1进行包装一下:自定义函数

drop function if exists rand_str;
#第一句: 如果存在重名函数,就将其删除
create function rand_str(strlen smallint) returns varchar(255)
#第二句: 定义一个函数,名称'rand_str' ,参数名 strlen 参数类型 smallint , 返回值类型 varchar(255) ,特别 注意下 这里的 是returns 下面的是 return
#BEGIN
#相当于左大括号 '{'
DECLARE result_str VARCHAR(255) DEFAULT '';
#声明返回值对象,类型 ,长度 ,默认值
SET result_str =SUBSTRING(MD5(RAND()),32-strlen,strlen);
#设置返回值对象的值 方式1中简单粗暴的函数
RETURN result_str;
#返回 结果对象 这里的是 return
END
# 结束标识 相当于 '}'

  

 
3.自定义函数 直接上代码
每一句的实现就不解释了,可以参加方式2中的代码解释看一下
 
DROP FUNCTION IF EXISTS rand_str;
create FUNCTION rand_str(strlen SMALLINT ) RETURNS VARCHAR(255)
BEGIN
DECLARE randStr VARCHAR(255) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
DECLARE i SMALLINT DEFAULT 0;
DECLARE resultStr VARCHAR(255) DEFAULT '';
WHILE i<strlen DO
SET resultStr=CONCAT(SUBSTR(randStr,FLOOR(RAND()*LENGTH(randStr))+1,1),resultStr);
SET i=i+1;
END WHILE;
RETURN resultStr;
END

  

 

Mysql 自定义随机字符串的更多相关文章

  1. mysql获取随机字符串和随机数的方法

    在我们开发的过程中,我们可能会需要在表中随机生成一些数据以供我们进行相应的测试. 就像我之前发的“mysql创建存储过程向数据表中加入规定条数的数据” 那么我们应该怎样生成随机的字符串和随机数字呢? ...

  2. java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串

    java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 package com.zdz.test; im ...

  3. MySQL随机字符串函数批量插入数据

      简单举个例子: drop table if exists demo1 create table demo1 ( id int primary key auto_increment, name ) ...

  4. mysql中的 随机字符串的生成

    方法1. SELECT SUBSTRING(MD5(RAND()),FLOOR(RAND()*26)+1,6) AS rand_str; 上诉示例产生的是:6位长度的随机字符串. 函数解释: rand ...

  5. mysql自定义函数并在存储过程中调用,生成一千万条数据

    mysql 自定义函数,生成 n 个字符长度的随机字符串 -- sql function delimiter $$ create function rand_str(n int) returns VA ...

  6. random and password 在Linux下生成crypt加密密码的方法,shell 生成指定范围随机数与随机字符串

    openssl rand -hex n (n is number of characters) LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head ...

  7. 用java在mysql中随机插入9000 000条数据

    package query; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; ...

  8. MySQL产生随机字符

    MySQL产生随机字符 UUID简介 UUID含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准,也是被开源软件基金会 (Open Softw ...

  9. [终章]进阶20-流程控制结构--if/case/while结构 - 三个while的存储过程案例(批量生成表单数据) - 随机长度的随机字符串的存储过程案例

    . mysql 存储过程中尽量使用 @变量 而不用局部变量, @变量不容易报错!权限小,更改一下就报错! . sql中判断相等'=' ,用'=' 不用'=='. . #流程控制结构 /* 顺序结构: ...

随机推荐

  1. qt opencv

    pro中加入如下代码. INCLUDEPATH += /usr/local/include \ /usr/local/include/opencv \ /usr/local/include/openc ...

  2. java多线程之计算数量

    package Thread.Abort; import java.util.ArrayList; import java.util.List; import java.util.Random; im ...

  3. View的缩放操作--CGAffineTransformMakeScale:

    __weak UIImageView *weekImage = imageView; imageView.transform = CGAffineTransformMakeScale(0.1, 0.1 ...

  4. 衔接UI线程和管理后台工作线程的类(多线程、异步调用)

    一个不错的UI多线程操作类 http://www.cnblogs.com/net66/archive/2005/08/03/206132.html

  5. memcached命令行参数说明(转)

    1.启动Memcache 常用参数 -p <num>      设置TCP端口号(默认不设置为: 11211) -U <num>      UDP监听端口(默认: 11211, ...

  6. [Flex] IFrame系列 —— IFrame嵌入html点击其他组件后页面消失的问题

    在flex建的web项目中,打开index.template.html,将param.wmode = "transparent";添加到以下位置 <script type=& ...

  7. 为什么wait(),notify()和notifyAll()必须在同步块或同步方法中调

    我们常用wait(),notify()和notifyAll()方法来进行线程间通信.线程检查一个条件后就行进入等待状态,例如,在"生产者-消费者"模型中,生产者线程发现缓冲区满了就 ...

  8. Codeforces 626C Block Towers「贪心」「二分」「数学规律」

    题意: 一堆人用方块盖塔,有n个人每次只能加两块方块,有m个人每次只能加三块方块.要求每个人盖的塔的高度都不一样,保证所用方块数最少,求最高的塔的高度. 0<=n+m  0<=n,m< ...

  9. 关于WebView的内存泄露问题

    在一个Activity中包含着一个WebView,通过WebView不停的访问Web页面,会发现内存会一直增长,退出此Activity,甚至杀死此Activity,内存依然没有被释放.这就导致,即使是 ...

  10. 使用postman玩转接口测试

    (一)前言: 之前搞自动化接口测试,由于接口的特性,要验证接口返回xml中的数据,所以没找到合适的轮子,就自己用requests造了个轮子,用着也还行,不过就是case管理有些麻烦,近几天又回头看了看 ...