mysql 存储过程-批量造数据

研究sql岂能不需要大量数据,故整理了一份批量造数据的笔记。

-- 创建表 kk_test
CREATE TABLE `kk_test`
(
    `id`           INT(11)     NOT NULL AUTO_INCREMENT,
    `randomString` VARCHAR(20) NOT NULL,
    `randomNumber` INT(11)     NOT NULL,
    `create_time`  datetime    NOT NULL,
    PRIMARY KEY (`id`),
    KEY `index_id` (`randomString`) USING HASH
) ENGINE = MEMORY
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8;
-- 查看表是否创建成功-显示表名,表模式和 创建时间
SELECT table_name,TABLE_SCHEMA,CREATE_TIME FROM information_schema.TABLES WHERE table_name ='kk_test';
-- 删除表
DROP TABLE kk_test;
-- 查看非系统库函数有哪些,如果有,不需要创建 DB为库名称,系统库勿动
show FUNCTION status where Db != 'sys';
-- 创建随机字符串函数
CREATE FUNCTION `rand_string`(n INT) RETURNS varchar(255) CHARSET latin1
BEGIN
    DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    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;
-- 查看刚创建的函数是否存在
show FUNCTION status WHERE name='rand_string';
-- 删除函数
drop FUNCTION rand_string;

-- 插入数据 确定 语法正确
INSERT into kk_test  (randomString,randomNumber,create_time ) VALUEs (rand_string(20),FLOOR(RAND() * 1000),now() );
SELECT *  from kk_test ;-- 查看数据是否生成
-- 创建存储过程
delimiter $$
drop procedure if exists add_kk_test;
CREATE  PROCEDURE `add_kk_test`(IN n int)
BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE (i <= n ) DO
            INSERT into kk_test  (randomString,randomNumber,create_time ) VALUEs (rand_string(20),FLOOR(RAND() * 1000),now() );
            set i=i+1;
        END WHILE;
END;$$
-- 启动存储过程。 第一次尽量一上来就别创建过万级数据,容易卡死
call add_kk_test(123456);
-- **************结束,等待结果*******************

-- 补充 查看当前用户连接,当连接过大或者创建数据过大卡死,进行删除 ;删除相关ID 即可删除对应过程
show processlist ;
kill 33;

你可能感兴趣的:(mysql 存储过程-批量造数据)