sql的实现目的,是为了生成一千条有外键关联的两张表中测试数据,批量生成
sql源码:
CREATE FUNCTION 自定义的函数名() RETURNS VARCHAR (32)<!-- 确定返回值类型-->
BEGIN<!-- begin......end 结构中声明的变量,其作用域也仅限这个结构,生命周期也一样,如要定义全局变量请在begin......end结构之前定义即可-->
DECLARE<!-- 声明变量,对相同类型,长度和使用要求的变量,可以使用逗号割开-->
did,
sn,
uid VARCHAR (32) DEFAULT NULL;
<!-- 声明变量类型与长度和默认值,有默认值时,及时变量不被赋值,也可以使用,但其值为给定的默认值-->
DECLARE
ver VARCHAR (12) DEFAULT '1.6.4';
<!-- 单独声明的不同用途的变量,并给定默认值,此变量不用被赋值,但是值是固定的-->
DECLARE
ma VARCHAR (12) DEFAULT NULL;
<!-- 单独声明的不同用途的变量,此变量必须被赋值-->
DECLARE
ver_code,
i INT DEFAULT 25;
<!-- int整形变量-->
DECLARE
upwd VARCHAR (32) DEFAULT '9ae0147d65724f72f74804af4aac6f13';
<!--32为的固定字符串,不需要赋值也可以直接使用-->
DECLARE
mail VARCHAR (24) DEFAULT NULL;
DECLARE
pid VARCHAR (8) DEFAULT 'G9EIAxgZ';
SET i := 1;
<!--重点说明赋值方式参考:https://www.cnblogs.com/genialx/p/5932558.html-->
<!--set的赋值方式可以是固定的给定值,也可以通过rand(),UUID()等mysql内部定义的取值函数取值,如下did,sn,uid,ma,mail等变量的赋值方式,可供参考-->
REPEAT
<!--对变量的使用在于计算与实际的表操作中,本人对次函数中定义的变量进行循环取值,再循环体中进行表数据插入,批量生成需要的测试数据-->
<!-- 循环体语句参考:http://www.jb51.net/article/52251.htm 或自行百度-->
SET did := REPLACE (UUID(), '-', ''),
sn := REPLACE (UUID(), '-', ''),
uid := REPLACE (UUID(), '-', '');
<!--同一set语句可针对多个变量赋值如上所示-->
SET ma := (CEIL(RAND() * 9999999));
<!--使用对奇函数赋值-->
SET mail := concat(
(CEIL(RAND() * 999999) + 99999),
"@163.com"
);
<!--使用拼接函数拼接字符串-->
INSERT INTO t_device (
deviceId,
deviceSN,
userId,
deviceStatus,
mac,
version,
version_code,
productId
)
VALUES
(
did,
sn,
uid,
1,
ma,
ver,
ver_code,
pid
);
<!--使用自定义变量进行表数据插入-->
INSERT INTO t_user (
userId,
companyId,
userName,
eMail,
userPwd,
languageType,
regDate,
gender,
userStatus,
isLogout
)
VALUES
(
uid,
11,
mail,
mail,
upwd,
'zh',
now(),
1,
1,
1
);
SET i = i + 1;
UNTIL i > 1000
<!--循环1000次-->
END
REPEAT
;
RETURN ma;
<!--返回值-->
END;
<!--方法结束-->