使用DBeaver 连接mysql,使用存储过程插入5万条数据

使用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)
BEGIN
    DECLARE 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 THEN
            commit;
            START TRANSACTION;

        END IF;

    END WHILE;
    
    COMMIT;
END$$
DELIMITER ;

执行存储过程
调用存储过程生成5万条记录:
2种方式,一种直接通过 call命令在sql窗口执行

CALL generate_test_data(50000);

一种通过python脚本执行,脚本名称 test.py

import pymysql
import time

def 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_time
            print(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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值