mysql中插入随机字符串数据及常见问题

插入随机字符串数据可用于大量数据的测试。

一、数据表

已 知 表 s t r i n g c o n t e n t , 其 中 包 含 字 段 : i d 要 求 自 增 长 c o n t e n t    v a r c h a r ( 30 ) 已知表stringcontent,其中包含字段:\\ id 要求自增长\\ content \ \ varchar(30) stringcontentidcontent  varchar(30)

二、实现步骤

1.按要求创建表

DROP TABLE IF EXISTS stringcontent;#防止该表已经存在
CREATE TABLE stringcontent(
	id INT PRIMARY KEY AUTO_INCREMENT,
	content VARCHAR(30)
);

2.创建存储过程

DROP PROCEDURE IF EXISTS myfinal;
DELIMITER $
CREATE PROCEDURE myfinal(IN num INT)
BEGIN
	DECLARE i INT DEFAULT 1;#定义一个循环变量i,表示插入次数
	DECLARE str VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';	
	DECLARE startIndex INT DEFAULT 1;#代表起始索引
	DECLARE len INT DEFAULT 1;#代表截取的字符的长度
	WHILE i<=num DO
		SET startIndex=FLOOR(RAND()*26+1);#产生一个随机的整数,代表起始索引1~26
		SET len=FLOOR(RAND()*(26-startIndex+1)+1);#产生一个随机的整数,代表截取长度,1~(26-startIndex+1)
		INSERT INTO stringcontent(content) VALUES(SUBSTR(str,startIndex,len));
		SET i=i+1;#循环变量更新
	END WHILE;

END$

3.调用存储过程并显示结果

CALL myfinal(10)$
SELECT * FROM stringcontent$

结果如下:
mysql中插入随机字符串数据及常见问题_第1张图片

三、常见问题

1.字符串长度的声明
个人认为 content 对应类型varchar长度应定义在26以上,通过分析在截取子串时可能出现索引为1,字符串为26的情况。因此在建表时,长度应定义在26以上。本文定义:

content  varchar(30);

2.len会不会为负数
mysql中rand()函数产生的随机数范围为:0~1,因此按上述方式进行定义不会出现负数。
3.为什么结果会出现空值的情况
随机字符串产生的原理是产生随机起始索引和随机长度,根据这两个参数对默认字符串进行截取。因此结果出现空值情况的可能原因是截取到了没有定义的字符,因此在定义字符串默认值时输入字母的长度一定要大于等于可截取字符串的最大长度。本文定义:

DECLARE str VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';

你可能感兴趣的:(SQL,mysql)