Я импортирую CSV-файл из ~ 150 тыс. Строк в таблицу 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
Edit:
Ahh - так что я нашел следующую команду в документации 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.
Edit 2:
Ahh - Я на минуту задумался о том, что стоял 'по возрастанию' для, и так как это шестигранной как раз перед этим, я предположил, что это означает "ASCII"
I преобразовал «41636365737363678794964» в ASCII и получил «AccessoryId», так что это было только значение HEX текста, который я пытался импортировать.
Так что ответ:
SHOW ENGINE INNODB STATUS\G
И найдите раздел под названием: LATEST FOREIGN KEY ERROR
Вы можете получить информацию оттуда. Если кто-то знает лучший или автоматический способ получить эту информацию, я приму это в качестве ответа.
Спасибо за информацию. По крайней мере, я знаю, сейчас. : P Было оценено. –