使用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;