跳到主要内容

批量生成测试数据

本文将向您介绍如何使用 Shell 脚本、存储过程和 ODC 批量生成测试数据。

前提条件

  • 您已部署 seekdb。更多有关部署 seekdb 的信息,请参见 部署概述
  • 您已拥有 CREATEINSERTSELECT 权限。更多有关查看当前用户权限的相关操作信息,请参见 查看用户权限。如果不具备该权限,请联系管理员为您授权,用户授权的相关操作请参见 直接授予权限

使用 Shell 脚本批量生成测试数据

通过编写 Shell 脚本来批量生成 SQL 脚本可以有效简化插入大量测试数据的过程,避免手动编写繁琐的 SQL 语句。这种方式可以根据需求生成大量的测试数据,提高效率并减少手动操作的工作量。

操作步骤

  1. 创建测试数据库和测试表。
  2. 创建 Shell 脚本。
  3. 运行 SQL 脚本。
  4. 查看数据。

步骤一:创建测试数据库和测试表

使用数据库管理工具(如命令行或图形化工具)创建一个用于存储测试数据的数据库,并在数据库中创建相应的测试表结构。

  1. 连接到 seekdb。

    示例如下:

    mysql -hxxx.xxx.xxx.xxx -P2881 -uroot -p****** -A
  2. 创建测试数据库。

    示例如下:

    执行下面 SQL 语句,创建测试数据库 test_sql_file_db

    CREATE DATABASE test_sql_file_db;

    更多有关创建数据库的详细信息,请参见 创建数据库

  3. 创建测试表。

    示例如下:

    执行下面 SQL 语句,创建测试表 test_sql_file_db.test_sql_file_tbl1

    CREATE TABLE test_sql_file_db.test_sql_file_tbl1 (id INT, name VARCHAR(50), email VARCHAR(50));

    更多有关创建表的详细信息,请参见 创建表

步骤二:创建 Shell 脚本

使用文本编辑器创建一个 Shell 脚本文件,可以使用 .sh 作为文件的扩展名。在 Shell 脚本中,使用输出重定向符号(>>>)将生成的测试数据写入到一个 SQL 脚本文件中。在循环或遍历过程中,将生成的数据以 SQL(INSERT)语句的形式写入到 SQL 脚本文件中。

  1. 打开终端。

  2. 创建 Shell 脚本文件。

    使用 vivim 编辑器创建一个新的 Shell 脚本文件。

    示例如下:

    执行以下命令,编写一个 Shell 脚本 generate_sql.sh

    vi generate_sql.sh
  3. 进入编辑模式。

    按下 i 键或者 Insert 键进入 vivim 编辑器的插入模式,可以在插入模式下编辑文件内容。

  4. 编写 Shell 脚本逻辑。

    在编辑模式下,编写 Shell 脚本的逻辑和命令。这些命令可以是 Shell 命令、条件语句、循环结构、函数等。

    示例如下:

    generate_sql.sh 脚本内容如下:

    #!/bin/bash

    # 定义 SQL 文件名
    SQL_FILE="insert_test_sql_file_tbl1.sql"

    # 创建 SQL 文件
    touch $SQL_FILE

    # 定义 SQL 语句
    INSERT_SQL="INSERT INTO test_sql_file_tbl1 (id, name, email) VALUES "

    # 循环生成 100,000 条用户记录
    for ((i=1; i<=100000; i++))
    do
    user_id=$i
    user_name="user_$i"
    user_email="user_$i@example.com"
    values="($user_id, '$user_name', '$user_email')"
    if (($i == 100000))
    then
    INSERT_SQL="$INSERT_SQL$values;"
    else
    INSERT_SQL="$INSERT_SQL$values, "
    fi
    done

    # 将 SQL 语句写入 SQL 文件中
    echo $INSERT_SQL >> $SQL_FILE
    信息
    • 该脚本将生成一个名为 insert_test_sql_file_tbl1.sql 的 SQL 文件,并在其中插入了 100,000 条用户记录。您可以根据需要修改 SQL 语句和循环生成的用户记录数量。

    • 在进行大量数据插入时,请提前关注相关服务器的资源使用情况,避免由于资源使用情况而导致数据插入失败或性能下降的情况。

  5. 保存文件。

    按下 Esc 键退出插入模式,并输入 :wq 命令保存文件并退出 vivim 编辑器。

  6. 运行 Shell 脚本文件。

    在终端中执行创建的 Shell 脚本将生成一个 SQL 脚本。

    示例如下:

    执行以下命令,运行创建的 Shell 脚本。该命令会在当前目录生成一个包含 100,000 条 INSERT 语句并且名为 insert_test_sql_file_tbl1.sql 的 SQL 脚本文件。

    sudo bash generate_sql.sh

步骤三:运行 SQL 脚本

可以使用命令行界面执行下面的命令来导入 SQL 脚本文件中的数据。

mysql -h$host -u$user_name -P$port -p$password -D$database_name < $sql_file

参数说明:

  • $host:提供 seekdb 连接 IP。

  • $port:提供 seekdb 连接端口。默认是 2881,在部署 seekdb 时可自定义。

  • $database_name:需要访问的数据库名称。

    提示

    连接 seekdb 的用户需要拥有该数据库的 CREATEINSERTSELECT 权限。更多有关用户权限的信息,请参见 权限分类

  • $user_name:提供连接账户。格式:用户名

  • $password:提供账户密码。

  • $sql_file:SQL 脚本文件名称。

    信息

    在执行 SQL 脚本文件时,请使用绝对路径指定 SQL 脚本文件的路径。

示例如下:

执行下面的命令,该命令将连接到指定的 seekdb 服务器,并将 SQL 脚本文件中的所有 INSERT 语句逐条导入到名为 test_sql_file_db 的数据库中,以向insert_test_sql_file_tbl1 表插入 100,000 条数据。

mysql -h127.0.0.1 -uroot -P2881 -p****** -Dtest_sql_file_db < /home/admin/test_data/insert_test_sql_file_tbl1.sql

步骤四:查看数据

执行下面 SQL 语句,查看 test_sql_file_db.test_sql_file_tbl1 中的数据行数。

SELECT count(*) FROM test_sql_file_db.test_sql_file_tbl1;

返回结果如下:

+----------+
| count(*) |
+----------+
| 100000 |
+----------+
1 row in set

使用存储过程批量生成测试数据

使用存储过程来批量生成测试数据是一种有效的方法,可以通过编写存储过程来自动化生成大量的测试数据。

操作步骤

  1. 创建测试数据库和测试表。
  2. 创建存储过程。
  3. 调用存储过程。
  4. 查看数据。

步骤一:创建测试数据库和测试表

使用数据库管理工具(如命令行或图形化工具)创建一个用于存储测试数据的数据库,并在数据库中创建相应的测试表结构。

  1. 连接到 seekdb。

    示例如下:

    mysql -hxxx.xxx.xxx.xxx -P2881 -uroot -p****** -A
  2. 创建测试数据库。

    示例如下:

    执行下面 SQL 语句,创建测试数据库 test_db

    CREATE DATABASE test_db;
  3. 执行下面 SQL 语句,切换到 test_db 数据库。

    use test_db;

    返回结果如下:

    Database changed
  4. 创建测试表。

    示例如下:

    执行下面 SQL 语句,创建表 test_pro_tbl1,它包含四个字段:

    • id 是一个整型字段,被定义为主键,且采用自动递增的方式进行编号。
    • create_time 是一个日期时间类型的字段,表示该行数据的创建时间,使用 DEFAULT CURRENT_TIMESTAMP 设置默认值为当前时间。
    • name 是一个字符型字段,最大长度为 50 个字符。
    • enrollment_date 是一个日期类型的字段,用于存储日期数据。
    CREATE TABLE test_pro_tbl1 (
    id INT NOT NULL AUTO_INCREMENT,
    create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    name VARCHAR(50),
    enrollment_date DATE,
    PRIMARY KEY(id));

步骤二:创建存储过程

  1. 指定一个自定义分隔符。

    示例如下:

    使用 DELIMITER 命令指定一个自定义分隔符 //

    DELIMITER //
  2. 创建存储过程。

    示例如下:

    执行下面 SQL 语句,创建存储过程 pro_generate_data,输入参数为 n,用于指定需要插入的数据条数。使用循环语句和 INSERT 语句来生成并插入数据。其中,test_pro_tbl1 是要插入数据的表名,nameenrollment_date 是要插入数据的字段名,i 是循环计数器,CONCAT 函数用于生成名称,DATE_ADD 函数用于生成日期。

    CREATE PROCEDURE pro_generate_data(IN n INT)
    BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE i <= n DO
    INSERT INTO test_pro_tbl1 (name, enrollment_date) VALUES (CONCAT('Name', i), DATE_ADD('2022-01-01', INTERVAL i DAY));
    SET i = i + 1;
    END WHILE;
    END;
    //

    更多有关创建存储过程的详细信息,请参见 存储过程

  3. 恢复默认的分号分隔符。

    DELIMITER ;

步骤三:调用存储过程

使用 CALL 语句调用存储过程来执行生成测试数据的逻辑。可以传递参数给存储过程,指定要生成的数据数量。

示例如下:

执行下面 SQL 语句,调用存储过程 pro_generate_data,并传递参数值为 100,000,表示需要插入 100,000 条数据。

CALL pro_generate_data(100000);
信息

您可以增加或减少输入参数的大小,来控制测试数据的数量。在调整参数大小时,需要考虑到数据库性能和存储空间的限制,避免生成过多的数据导致数据库崩溃或者存储空间不足。

步骤四:查看数据

执行下面 SQL 语句,查看 test_pro_tbl1 中的数据行数。

SELECT count(*) FROM test_pro_tbl1;

返回结果如下:

+----------+
| count(*) |
+----------+
| 100000 |
+----------+
1 row in set

相关文档

  • 更多有关连接数据库的详细信息,请参见 连接方式概述
  • 更多有关删除表的信息,请参见 删除表
  • 更多有关删除数据的信息,请参见 删除数据