MySQL实战:使用存储过程造测试数据

使用存储过程造测试数据

CREATE TABLE single_table (
    id INT NOT NULL AUTO_INCREMENT,
    key1 VARCHAR(100),
    key2 INT,
    key3 VARCHAR(100),
    key_part1 VARCHAR(100),
    key_part2 VARCHAR(100),
    key_part3 VARCHAR(100),
    common_field VARCHAR(100),
    PRIMARY KEY (id),
    KEY idx_key1 (key1),
    UNIQUE KEY idx_key2 (key2),
    KEY idx_key3 (key3),
    KEY idx_key_part(key_part1, key_part2, key_part3)
) Engine=InnoDB CHARSET=utf8;

随机生成长度为len的字符串

delimiter //
create function rand_string(len integer) 
returns text no sql
begin
  declare counter int default 1;
  declare str text default '';
 
  if len < 1 then
    return null;
  end if;
 
  while counter <= len do
    set str = concat(str, char(floor(rand() * 94) + 33));
    set counter = counter + 1;
  end while;
 
  return str;
end
//
delimiter ;
DROP PROCEDURE IF EXISTS create_data;
-- 定义存储过程
DELIMITER //
CREATE PROCEDURE create_data(IN loop_times INT)
BEGIN
    DECLARE var INT;
    DECLARE str TEXT default '';
    SET var = 1;
    WHILE var <= loop_times DO
    	SET str = left(replace(uuid(),'-',''), 10);
    	INSERT INTO single_table (`key1`,`key2`,`key3`, `key_part1`,`key_part2`,`key_part3`,`common_field`)
    	VALUES (str, var, str, str, str, str, str);
    	SET var = var + 1;
    END WHILE;
END //
DELIMITER ;
call create_data(10000);
create table t1 like single_table;
insert into t1 (select * from single_table where id <= 10000);

参考博客

[1]https://blog.csdn.net/horses/article/details/108083399

猜你喜欢

转载自blog.csdn.net/zzti_erlie/article/details/123676218