因爲測試或者學習須要,咱們要常常向一個新建的數據表插入幾百萬行以上的數據來驗證咱們的一些想法,好比索引的合理構建,表字段類型的設計等等,下面跟你們演示如何往一個新建的數據表插入N多條數據。函數
1.新建一個數據表,例如:學習
CREATE TABLE userinfo_uuid ( uuid varchar(36) NOT NULL, name varchar(64) NOT NULL DEFAULT '', email varchar(64) NOT NULL DEFAULT '', password varchar(64) NOT NULL DEFAULT '', dob date DEFAULT NULL, address varchar(255) NOT NULL DEFAULT '', city varchar(64) NOT NULL DEFAULT '', state_id tinyint unsigned NOT NULL DEFAULT '0', zip varchar(8) NOT NULL DEFAULT '', country_id smallint unsigned NOT NULL DEFAULT '0', gender enum('M','F') NOT NULL DEFAULT 'M', account_type varchar(32) NOT NULL DEFAULT '', verified tinyint NOT NULL DEFAULT '0', allow_mall tinyint unsigned NOT NULL DEFAULT '0', parrent_account int unsigned NOT NULL DEFAULT '0', closest_airport varchar(3) NOT NULL DEFAULT '', PRIMARY KEY(uuid), UNIQUE KEY email (email), KEY country_id (country_id), KEY state_id (state_id), KEY state_id_2 (state_id,city,address) )ENGINE=InnoDB;
2.由於這個表有不少varchar字段,咱們須要構建一個rand_string函數能夠隨意插入任意字符長度的字段測試
set global log_bin_trust_function_creators = 1; DROP FUNCTION IF EXISTS rand_string; 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 ;
3.建立存儲過程ui
DELIMITER $$ DROP PROCEDURE IF EXISTS `insert_userinfo_uuid`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_userinfo_uuid`(IN item INTEGER) BEGIN DECLARE counter INT; SET counter = item; WHILE counter >= 1 DO insert into userinfo (uuid,name,email,password,dob,address,city,state_id,zip,country_id,gender,account_type,verified,allow_mall,parrent_account,closest_airport) values(uuid(),rand_string(64), rand_string(64), rand_string(64), '2010-10-10', rand_string(255), rand_string(64), ceil(rand() * 100), rand_string(8), ceil(rand() * 100), 'M', rand_string(32), 0, 0, 0, rand_string(3)); SET counter = counter - 1; END WHILE; END$$ DELIMITER ;
4.最後調用N屢次達到插入N條記錄spa
call `insert_userinfo_uuid`(1000000);