使用DBeaver连接MySQL并创建存储过程生成5万条数据
连接MySQL数据库
打开DBeaver,点击"数据库"菜单选择"新建连接",选择MySQL驱动。填写主机、端口、数据库名称、用户名和密码等信息,测试连接成功后保存。
创建测试表结构
在SQL编辑器中执行以下语句创建测试表:
CREATE TABLE security_moat(station_id bigint AUTO_INCREMENT PRIMARY KEY,station_sn bigint,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
创建存储过程生成数据
执行以下存储过程,该过程会批量插入5万条随机数据:
DELIMITER $$
CREATE PROCEDURE InsertBulkDatc15(IN num_records INT)
BEGINDECLARE i INT DEFAULT 0;DECLARE current_station_id bigint default 0;DECLARE current_device_id bigint default 1;-- 开启事务确保性能START TRANSACTION;WHILE i < num_records DO-- 生成模拟数据SET current_station_id = CONCAT(3109, i);SET current_device_id = CONCAT(5100, i);-- 插入记录insert into security_moat (station_id,station_sn) values (current_station_id,current_device_id);SET i = i + 1;-- 每10条提交一次,平衡性能与内存使用IF i % 10 = 0 THENcommit;START TRANSACTION;END IF;END WHILE;COMMIT;
END$$
DELIMITER ;
执行存储过程
调用存储过程生成5万条记录:
2种方式,一种直接通过 call命令在sql窗口执行
CALL generate_test_data(50000);
一种通过python脚本执行,脚本名称 test.py
import pymysql
import timedef bulk_insert_via_stored_procedure():# 数据库配置config = {'host': 'localhost','user': 'art','password': 'test','database': 'mysql','charset': 'utf8mb4','cursorclass': pymysql.cursors.DictCursor}try:# 连接数据库connection = pymysql.connect(**config)with connection.cursor() as cursor:print("开始调用存储过程插入数据...")start_time = time.time()# 调用存储过程,传入要插入的记录数cursor.callproc('InsertBulkDatc15', (50000,))connection.commit()elapsed = time.time() - start_timeprint(f"成功插入50,000条记录,耗时: {elapsed:.2f}秒")print(f"平均速率: {50000/elapsed:.2f} 条/秒")except pymysql.MySQLError as e:print(f"数据库错误: {e}")finally:if connection:connection.close()if __name__ == "__main__":bulk_insert_via_stored_procedure()
本地连接,直接通过cmd执行即可
如果为服务器上,通过服务器执行脚本
本地打开cmd,输入D: 进到 test.py所在位置
py test.py 执行脚本
验证数据生成
查询表记录数确认数据生成成功:
SELECT COUNT(*) FROM test_data;
清理资源
数据生成完成后可删除存储过程:
DROP PROCEDURE IF EXISTS generate_test_data;
DROP PROCEDURE IF EXISTS generate_test_data_optimized;