批量生成测试数据
本文将向您介绍如何使用 Shell 脚本、存储过程和 ODC 批量生成测试数据。
前提条件
- 您已部署 seekdb。更多有关部署 seekdb 的信息,请参见 部署概述。
- 您已拥有
CREATE、INSERT和SELECT权限。更多有关查看当前用户权限的相关操作信息,请参见 查看用户权限。如果不具备该权限,请联系管理员为您授权,用户授权的相关操作请参见 直接授予权限。
使用 Shell 脚本批量生成测试数据
通过编写 Shell 脚本来批量生成 SQL 脚本可以有效简化插入大量测试数据的过程,避免手动编写繁琐的 SQL 语句。这种方式可以根据需求生成大量的测试数据,提高效率并减少手动操作的工作量。
操作步骤
- 创建测试数据库和测试表。
- 创建 Shell 脚本。
- 运行 SQL 脚本。
- 查看数据。
步骤一:创建测试数据库和测试表
使用数据库管理工具(如命令行或图形化工具)创建一个用于存储测试数据的数据库,并在数据库中创建相应的测试表结构。
-
连接到 seekdb。
示例如下:
mysql -hxxx.xxx.xxx.xxx -P2881 -uroot -p****** -A -
创建测试数据库。
示例如下:
执行下面 SQL 语句,创建测试数据库
test_sql_file_db。CREATE DATABASE test_sql_file_db;更多有关创建数据库的详细信息,请参见 创建数据库。
-
创建测试表。
示例如下:
执行下面 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 脚本 文件中。
-
打开终端。
-
创建 Shell 脚本文件。
使用
vi或vim编辑器创建一个新的 Shell 脚本文件。示例如下:
执行以下命令,编写一个 Shell 脚本
generate_sql.sh。vi generate_sql.sh -
进入编辑模式。
按下 i 键或者 Insert 键进入
vi或vim编辑器的插入模式,可以在插入模式下编辑文件内容。 -
编写 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 语句和循环生成的用户记录数量。 -
在进行大量数据插入时,请提前关注相关服务器的资源使用情况,避免由于资源使用情况而导致数据插入失败或性能下降的情况。
-
-
保存文件。
按下 Esc 键退出插入模式,并输入
:wq命令保存文件并退出vi或vim编辑器。 -
运行 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 的用户需要拥有该数据库的
CREATE、INSERT和SELECT权限。更多有关用户权限的信息,请参见 权限分类。 -
$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
使用存储过程批量生成测试数据
使用存储过程来批量生成测试数据是一种有效的方法,可以通 过编写存储过程来自动化生成大量的测试数据。
操作步骤
- 创建测试数据库和测试表。
- 创建存储过程。
- 调用存储过程。
- 查看数据。
步骤一:创建测试数据库和测试表
使用数据库管理工具(如命令行或图形化工具)创建一个用于存储测试数据的数据库,并在数据库中创建相应的测试表结构。
-
连接到 seekdb。
示例如下:
mysql -hxxx.xxx.xxx.xxx -P2881 -uroot -p****** -A -
创建测试数据库。
示例如下:
执行下面 SQL 语句,创建测试数据库
test_db。CREATE DATABASE test_db; -
执行下 面 SQL 语句,切换到
test_db数据库。use test_db;返回结果如下:
Database changed -
创建测试表。
示例如下:
执行下面 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));
步骤二:创建存储过程
-
指定一个自定义分隔符。
示例如下:
使用
DELIMITER命令指定一个自定义分隔符//。DELIMITER // -
创建存储过程。
示例如下:
执行下面 SQL 语句,创建存储过程
pro_generate_data,输入参数为n,用于指定需要插入的数据条数。使用循环语句和INSERT语句来生成并插入数据。其中,test_pro_tbl1是要插入数据的表名,name和enrollment_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;
//更多有关创建存储过程的详细信息,请参见 存储过程。
-
恢复默认的分号分隔符。
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