• MySQL批量添加数据脚本


    MySQL批量添加数据脚本

    参考文章:

    MySQL substring()函数

    MySQL存储过程与函数

    1.建表语句

    CREATE TABLE `dept` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `deptName` VARCHAR(30) DEFAULT NULL,
    `address` VARCHAR(40) DEFAULT NULL,
    ceo INT NULL ,
    PRIMARY KEY (`id`)
    ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    CREATE TABLE `emp` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `empno` INT NOT NULL ,
    `name` VARCHAR(20) DEFAULT NULL,
    `age` INT(3) DEFAULT NULL,
    `deptId` INT(11) DEFAULT NULL,
    PRIMARY KEY (`id`)
    #CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `t_dept` (`id`)
    ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    

    2.设置参数

    在执行创建函数之前, 首先请保证 log_bin_trust_function_creators 参数为 1, 即 on 开启状态。
    否则会报错:

    查询: show variables like 'log_bin_trust_function_creators';
    设置: set global log_bin_trust_function_creators=1;
    当然, 如上设置只存在于当前操作, 想要永久生效, 需要写入到配置文件中:
    在[mysqld]中加上 log_bin_trust_function_creators=1

    log_bin_trust_function_creators错误解决

    3.编写随机函数

    存储过程与函数可以看这篇随笔MySQL存储过程与函数

    创建函数,保证每条数据都不同

    3.1随机产生字符串

    # 用于产生n位的字符串
    DELIMITER $$
    CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
    BEGIN
    DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
    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()*52),1));
    SET i = i + 1;
    END WHILE;
    RETURN return_str;
    END $$
    

    MySQL substring()函数

    MySQL中的RAND()函数使用详解

    3.2随机产生部门编号

    #用于随机产生多少到多少的编号
    DELIMITER $$
    CREATE FUNCTION rand_num (from_num INT ,to_num INT) RETURNS INT(11)
    BEGIN
    DECLARE i INT DEFAULT 0;
    SET i = FLOOR(from_num +RAND()*(to_num -from_num+1)) ;
    RETURN i;
    END$$
    

    4.创建存储过程

    4.1创建往emp表中插入数据的存储guocheng

    DELIMITER $$
    CREATE PROCEDURE insert_emp( START INT , max_num INT )
    BEGIN
    DECLARE i INT DEFAULT 0;
    #set autocommit =0 把 autocommit 设置成 0
    SET autocommit = 0;
    REPEAT
    SET i = i + 1;
    INSERT INTO emp (empno, NAME ,age ,deptid ) VALUES ((START+i) ,rand_string(6) ,
    rand_num(30,50),rand_num(1,10000));
    UNTIL i = max_num
    END REPEAT;
    COMMIT;
    END$$
    

    4.2创建往dept表中插入数据的存储过程

    DELIMITER $$
    CREATE PROCEDURE `insert_dept`( max_num INT )
    BEGIN
    DECLARE i INT DEFAULT 0;
    SET autocommit = 0;
    REPEAT
    SET i = i + 1;
    INSERT INTO dept ( deptname,address,ceo ) VALUES (rand_string(8),rand_string(10),rand_num(1,500000));
    UNTIL i = max_num
    END REPEAT;
    COMMIT;
    END$$
    

    5.调用存储过程

    # 执行存储过程, 往 dept 表添加 1 万条数据
    DELIMITER ;
    CALL insert_dept(10000);
    
    #执行存储过程, 往 emp 表添加 50 万条数据
    DELIMITER ;
    CALL insert_emp(100000,500000);
    

    6.测试

  • 相关阅读:
    每日英语:Is Bo Xilai the Past or Future?
    每日英语:Cyclists Live Six Years Longer
    每日英语:No Consensus: China Debate on Women's Roles
    每日英语:How to Be a Better Conversationalist
    每日英语:Our Unique Obsession With Rover And Fluffy
    每日英语:For Michael Dell, Saving His Deal Is Just First Step
    每日英语:Secrets Of Effective Office Humor
    每日英语:China Underwhelmed After First Apple Event
    三分钟读懂TT猫分布式、微服务和集群之路
    Java基础精选,你答对了几道?
  • 原文地址:https://www.cnblogs.com/gttttttt/p/13686912.html
Copyright © 2020-2023  润新知