Mysql生成测试数据函数

1、查看设置是否允许创建函数系统参数

show variables like 'log_bin_trust_function_creators';

2、临时设置允许创建函数系统参数

set global log_bin_trust_function_creators=TRUE;

3、创建测试数据库

create database mytest charset=utf8mb4;
use mytest;

4、创建测试数据表

CREATE TABLE test1 (
    id INT (11) NOT NULL AUTO_INCREMENT,
    user_id VARCHAR (20) NOT NULL,
    group_id INT (11) NOT NULL,
    create_time datetime NOT NULL,
    PRIMARY KEY (id),
    KEY index_user_id (user_id) USING HASH
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;

5、创建随机字符串函数

delimiter $$
CREATE FUNCTION rand_string(n int) RETURNS varchar(255)
begin
  declare chars_str varchar(100)
  default "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  declare return_str varchar(255) default "";
  declare i int default 0;
  while i < n do
      set return_str=concat(return_str,substring(chars_str,floor(1+rand()*62),1));
      set i= i+1;
  end while;
  return return_str;
end $$
delimiter;
5.1、自定义函数操作
-- &#x67E5;&#x770B;&#x51FD;&#x6570;
SHOW FUNCTION STATUS LIKE 'rand_string%';

-- &#x67E5;&#x770B;&#x8BE6;&#x60C5;&#x51FD;&#x6570;
SHOW CREATE FUNCTION rand_string;|\G

-- &#x67E5;&#x8BE2;&#x51FD;&#x6570;
SELECT rand_string(10);

-- &#x5220;&#x9664;&#x51FD;&#x6570; rand_string:&#x51FD;&#x6570;&#x540D;
DROP FUNCTION IF EXISTS rand_string;

6、创建存储过程

delimiter $$
CREATE  PROCEDURE insert_data(IN n int)
BEGIN
  DECLARE i INT DEFAULT 1;
    WHILE (i <= n ) do insert into test1 (user_id,group_id,create_time values (rand_string(10),floor(rand() * 100) ,now() ); set i="i+1;" end while; $$ delimiter ;< code></=>
6.1、存储过程操作
-- &#x67E5;&#x770B;&#x5B58;&#x50A8;&#x8FC7;&#x7A0B;
show procedure status like 'insert_data%';

-- insert_data &#x5B58;&#x50A8;&#x8FC7;&#x7A0B;&#x540D;&#x79F0; &#x67E5;&#x8BE2;&#x8BE6;&#x60C5;
SHOW CREATE PROCEDURE insert_data;|\G

-- &#x5220;&#x9664;&#x5B58;&#x50A8;&#x8FC7;&#x7A0B; insert_data &#x540D;&#x79F0;
DROP PROCEDURE insert_data;

7、调用存储过程,插入数据

-- &#x63D2;&#x5165;&#x5341;&#x4E07;&#x6761;&#x6570;&#x636E;&#xFF0C;&#x5927;&#x7EA6;4&#x5206;&#x949F;&#x5DE6;&#x53F3;
call insert_data(100000);

建议一次数量十万,多开几个线程执行

8、插入成功后,可以快速创建其他数据表并插入大量数据

create table test2 engine=INNODB as select * from test1;

无论风雨,和自己一决胜负吧

Original: https://www.cnblogs.com/aerfazhe/p/16416200.html
Author: 阿尔法哲
Title: Mysql生成测试数据函数

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621036/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球