mysql模拟插入数据表

Posted 怪盗dark

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql模拟插入数据表相关的知识,希望对你有一定的参考价值。

由于测试或者学习需要,我们要经常向一个新建的数据表插入几百万行以上的数据来验证我们的一些想法,比如索引的合理构建,表字段类型的设计等等,下面跟大家演示如何往一个新建的数据表插入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.创建存储过程

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条记录

call `insert_userinfo_uuid`(1000000);

 

以上是关于mysql模拟插入数据表的主要内容,如果未能解决你的问题,请参考以下文章

将代码片段插入数据库并在 textarea 中以相同方式显示

KDoc:插入代码片段

linux中怎么查看mysql数据库版本

代码片段使用复杂的 JavaScript 在 UIWebView 中插入 HTML?

部分代码片段

当我想模拟数据并测试 UI 片段时,doNothing() 不起作用