zoukankan      html  css  js  c++  java
  • 调用函数和存储过程批量插入数据

    Mysql 系列文章主页 

    ===============

    1 建立 Employee 表

    DROP TABLE IF EXISTS employee;
    CREATE TABLE IF NOT EXISTS employee (
        id INT PRIMARY KEY,
        name VARCHAR(40),
        dept_id INT
    );

    2 建立 Department 表

    DROP TABLE IF EXISTS department;
    CREATE TABLE IF NOT EXISTS department (
        id INT PRIMARY KEY,
        name VARCHAR(40)
    );

    3 建立一个产生随机 N 位字符串的函数

    delimiter $$
    DROP FUNCTION IF EXISTS rand_string;
    CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
    BEGIN
        DECLARE chars_str VARCHAR(100) DEFAULT 'qwertyuiopasdfghjklzxcvbnm';
        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 $$

    4 建立一个产生 [1001, 1100] 数字的函数

    delimiter $$
    DROP FUNCTION IF EXISTS rand_num;
    CREATE FUNCTION rand_num() RETURNS INT(5)
    BEGIN
        DECLARE i INT DEFAULT 0;
        SET i = floor(1000 + floor(rand() * 100) + 1);
        RETURN i;
    END $$

    5 相看函数是否创建成功

    SHOW FUNCTION STATUS;

    结果如下图:

    6 建立批量插入 Employee 表的存储过程

    delimiter $$
    DROP PROCEDURE IF EXISTS insert_employee;
    CREATE PROCEDURE insert_employee(IN START INT(10), IN max_num INT(10))
    BEGIN
        DECLARE i INT DEFAULT 0;
        /*把autocommit设置成0*/
        SET autocommit = 0;
        REPEAT
            SET i = i + 1;
            INSERT INTO employee(id, name, dept_id) VALUES((START + i), rand_string(30), rand_num());
        UNTIL i = max_num END REPEAT;
        COMMIT;
    END $$

    7 建立批量插入 Department 表的存储过程

    delimiter $$
    DROP PROCEDURE insert_dept;
    CREATE PROCEDURE insert_dept(IN START INT(10), IN max_num INT(10))
    BEGIN
        DECLARE i INT DEFAULT 0;
        SET autocommit = 0;
        REPEAT
            SET i = i + 1;
            INSERT INTO department(id, name) VALUES((START + i), rand_string(10));
            UNTIL i = max_num END REPEAT;
        COMMIT;
    END $$

     8 调用存储过程来向表中批量插入数据

    CALL insert_employee(100000000, 500);

    说明:向 Employee 表中插入 500 条数据,id 范围是:[100000000+1, 100000000+500]

    CALL insert_dept(1000, 100)

    说明:向 Department 表中插入 100 条数据,id 范围是:[1000+1, 1000+100]

    PS:

    • 如果想向 Employee 表中插入更多数据,修改上面的 500 参数即可
    • 小心修改上面的 100 这个参数,因为在 rand_num 函数中也把 100 写死了,如果要修改,一定要两边同步修改
  • 相关阅读:
    20165215 2017-2018-2 《Java程序设计》第4周学习总结
    20165215 2017-2018-2 《Java程序设计》第3周学习总结
    20165215 2017-2018-2 《Java程序设计》第2周学习总结
    20165215 第一次测试总结
    20165215 2017-2018-2《Java程序设计》第一周学习总结
    20165215 预备作业3 Linux安装及学习
    20165215 学习基础和c语言基础调查
    20165215 我期望的师生关系
    20165220 Java第三周学习总结
    20165220预备作业3 Linux安装及学习
  • 原文地址:https://www.cnblogs.com/cyhbyw/p/8855934.html
Copyright © 2011-2022 走看看