首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Java MySQL 批量導入數據與自動更新時間戳實戰

     編輯:MySQL 綜合教學

百萬級數據導入:LOAD DATA 命令比 INSERT 快 10 倍

處理千萬級數據導入時,INSERT 效率極低(3000 萬條需 20+ 小時)。MySQL LOAD DATA 可將速度提升 10 倍以上。本文詳解語法、本地/遠端導入、REPLACE 更新模式,以及自動維護時間戳的兩種方案。

LOAD DATA 核心語法

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
  [REPLACE | IGNORE] INTO TABLE tbl_name
  [CHARACTER SET charset_name]
  [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char']]
  [LINES [STARTING BY 'string'] [TERMINATED BY 'string']]
  [IGNORE number LINES]
  [(col_name_or_user_var,...)]
  [SET col_name = expr,...]

常用場景

1. 本地文件導入

LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE target_table;

2. 覆蓋更新模式(主鍵/唯一鍵衝突時替換)

LOAD DATA LOCAL INFILE 'data.csv' REPLACE INTO TABLE target_table;

自動更新時間戳的兩種方案

方案一:應用層傳入當前時間(常規做法)

導入腳本中為每行數據生成當前時間戳,隨數據一同寫入。靈活但增加應用複雜度。

方案二:資料庫層自動維護(推薦)

建表時定義時間戳欄位自動更新:

`update_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

特性:

  • 插入時若未指定值,自動填入當前時間
  • 更新行時自動刷新為當前時間
  • 若導入文件包含該欄位且值非 NULL,以文件值為準

效能對比實測

方式3000萬條耗時相對速度
INSERT 逐條執行20+ 小時1x(基準)
LOAD DATA LOCAL INFILE~2 小時10x+

注意事項

  • LOCAL 關鍵字表示文件在客戶端,需客戶端與服務端均啟用 local_infile=1
  • REPLACE 需表有主鍵或唯一索引,否則等同 IGNORE
  • 字符集需與文件編碼一致,否則導致亂碼
  • 大批量導入前建議暫停非唯一索引,導入後重建
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved