研究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;