使用存储过程添加20万数据

发布于:2024-05-18 ⋅ 阅读:(144) ⋅ 点赞:(0)

生成一个student表

DDL

CREATE TABLE student (
    id INT PRIMARY KEY AUTO_INCREMENT,  -- 假设id是主键且自动增长
    createDate DATE NOT NULL,           -- 创建日期,不能为空
    userName VARCHAR(100) NOT NULL,     -- 用户名,不能为空,长度限制为100个字符
    phone VARCHAR(20),                  -- 电话号码,长度限制为20个字符
    age INT,                            -- 年龄,整数类型
    sex ENUM('Male', 'Female'),         -- 性别,枚举类型,只能为'Male'或'Female'
    introduce TEXT                      -- 介绍,文本类型,可以存储大量文本
);

存储过程代码

DELIMITER //

CREATE PROCEDURE InsertRandomStudents(num_students INT)
BEGIN
    -- 声明变量,用于存储随机生成的数据
    DECLARE v_userName VARCHAR(100);
    DECLARE v_phone VARCHAR(20);
    DECLARE v_age INT;
    DECLARE v_sex ENUM('Male', 'Female');
    DECLARE v_introduce TEXT;
    DECLARE v_createDate DATE;
    DECLARE counter INT DEFAULT 0; -- 计数器,用于控制循环次数

    -- 循环插入随机数据,直到达到指定的学生数量
    WHILE counter < num_students DO
        -- 生成随机用户名(示例:User123)
        SET v_userName = CONCAT('User', FLOOR(RAND() * 1000000));

        -- 生成随机电话号码(示例:13800138000)
        SET v_phone = CONCAT('1', FLOOR(RAND() * 9000000000 + 1000000000));

        -- 生成随机年龄(18到30岁之间)
        SET v_age = FLOOR(RAND() * (30 - 18 + 1)) + 18;

        -- 随机选择性别
        SET v_sex = IF(RAND() > 0.5, 'Male', 'Female');

        -- 生成随机介绍文本(示例:这是一个随机介绍)
        SET v_introduce = CONCAT('这是一个随机介绍:', FLOOR(RAND() * 10000));

        -- 生成随机创建日期(过去5年内的随机日期)
        SET v_createDate = DATE_SUB(CURDATE(), INTERVAL FLOOR(RAND() * 5 * 365) DAY);

        -- 插入随机生成的数据到student表中
        INSERT INTO student (createDate, userName, phone, age, sex, introduce)
        VALUES (v_createDate, v_userName, v_phone, v_age, v_sex, v_introduce);

        -- 更新计数器
        SET counter = counter + 1;
    END WHILE;
END //

DELIMITER ;

调用代码

-- 调用存储过程,插入20万条随机学生数据
CALL InsertRandomStudents(200000);

查询

select count(*) from student;