我正在將約150k行的CSV文件導入到MySQL(InnoDB)表中。當我收到一個外鍵約束錯誤時,是否有可能「捕捉」MySQL中的無效值?
在導入期間的某個時間點,由於外鍵約束錯誤而導致失敗。
它顯示了故障上發生的這列:
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails
(`db`.`table`, CONSTRAINT `fk` FOREIGN KEY (`otherTableId`) REFERENCES `otherTable`
(`otherTableId`))
是否可以「捕捉」那是什麼價值?
我還沒有嘗試過任何東西,因爲我不知道該怎麼嘗試。 :P
編輯:
啊 - 所以我發現下面的命令MySQL文檔中:
SHOW ENGINE INNODB STATUS\G
我發現從該命令的如下信息:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2014-01-22 16:27:26 2afaf98b8940 Transaction:
TRANSACTION 85952, ACTIVE 0 sec inserting
mysql tables in use 1, locked 1
4 lock struct(s), heap size 376, 1 row lock(s), undo log entries 1
MySQL thread id 944, OS thread handle 0x2afaf98b8940, query id 66223 System lock
{{QUERY}}
Foreign key constraint fails for table {TABLE INFO}:
,
CONSTRAINT `fk` FOREIGN KEY (`Id`) REFERENCES `table` (`id`)
Trying to add in child table, in index `fk` tuple:
DATA TUPLE: 2 fields;
0: len 11; hex 4163636573736f72794964; asc AccessoryId;;
1: len 4; hex 80000003; asc ;;
But in parent table `db`.`table`, in index `PRIMARY`,
the closest match we can find is record:
PHYSICAL RECORD: n_fields 5; compact format; info bits 0
0: len 6; hex 46494c544552; asc FILTER;;
1: len 6; hex 000000007300; asc s ;;
2: len 7; hex fb000001b01476; asc v;;
3: len 1; hex 46; asc F;;
4: len 9; hex 756e646566696e6564; asc undefined;;
我在找什麼是:
Trying to add in child table, in index `fk` tuple:
DATA TUPLE: 2 fields;
0: len 11; hex 4163636573736f72794964; asc AccessoryId;;
1: len 4; hex 80000003; asc ;;
我不知道什麼'asc'在'AccessoryId'之前的含義,但是這讓我發現我並沒有忽略CSV的第一行。
編輯2:
啊 - 我在想着什麼「ASC」主張分鐘,因爲有六角之前,我認爲它的意思是「ASCII」
我將'4163636573736f72794964'轉換爲ASCII並得到「AccessoryId」,所以這就是我試圖導入的文本的HEX值。
所以答案是:
SHOW ENGINE INNODB STATUS\G
然後搜索標題爲:LATEST FOREIGN KEY ERROR
你可以從那裏得到你的信息。如果有人知道更好或自動獲取這些信息的方式,我會接受它作爲答案。
感謝您的信息。至少我現在知道。 :P有人表示讚賞。 –