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

MySQL Error 1452: 外鍵約束失敗 - LOAD DATA 導入數據實戰排查

     編輯:MySQL 綜合教學

錯誤現場

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails

使用 `LOAD DATA LOCAL INFILE` 導入 txt 文件時拋出。

導入腳本

LOAD DATA LOCAL INFILE "E:/javaTest/sql.txt" 
INTO TABLE question 
FIELDS TERMINATED BY ',' 
(user_id, point, status, title, content, sub_type_id, delete_flg, entry_date_time, reply_date_time);

根因定位

  1. 分隔符衝突:指定 `FIELDS TERMINATED BY ','`,但 `content` 字段 (VARCHAR/TEXT) 內容本身包含逗號,導致字段錯位。
  2. 外鍵值非法:錯位後,`sub_type_id` 字段讀取到錯誤數值,該值在關聯表 `sub_type` 中不存在,觸發外鍵約束失敗。

解決方案

方案一:更換分隔符 (推薦)

導出數據時使用不可見字符 (如 `\t` Tab、 `|` 管道符) 作為分隔符:

FIELDS TERMINATED BY '\t'  -- 或 '|'

方案二:使用 ENCLOSED BY 包裹字符串

FIELDS TERMINATED BY ',' ENCLOSED BY '"'  -- 字符串字段用雙引號包裹
-- 要求導出文件同樣格式

方案三:臨時禁用外鍵檢查 (僅限維護窗口)

SET FOREIGN_KEY_CHECKS = 0;
LOAD DATA ...;
SET FOREIGN_KEY_CHECKS = 1;

⚠️ 風險:可能導入臟數據,事後需檢查修復。

最佳實踐總結

  • 導出/導入必須 **統一分隔符策略**,含特殊字符字段務必使用 `ENCLOSED BY`。
  • 大數據導入前,建議先導入小樣本驗證字段映射正確性。
  • 生產環境禁用外鍵檢查需極度謹慎,並做好回滾預案。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved