Ошибка при добавлении внешнего ключа в существующие таблицы - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть две таблицы базы данных, которые я только что обнаружил без отношения внешнего ключа в определенном столбце.Оба столбца имеют значение VARCHAR(45) NON NULL, но по какой-либо причине они выбрасывают ERROR 1452: Cannot add or update a child row: a foreign key constraint fails.Я сделал SHOW ENGINE INNODB STATUS;, как предложено во многих сообщениях на SO, и это дает следующий блок ошибок

   LATEST FOREIGN KEY ERROR
------------------------
2019-04-02 17:08:10 0x3a50 Transaction:
TRANSACTION 1679595, ACTIVE 0 sec inserting, thread declared inside InnoDB 4965
mysql tables in use 2, locked 2
9 lock struct(s), heap size 1136, 22 row lock(s), undo log entries 18
MySQL thread id 53, OS thread handle 14928, query id 341954 localhost ::1 root copy to tmp table
ALTER TABLE `dbtest`.`task` 
ADD CONSTRAINT `FK_planning_recurring_uid`
  FOREIGN KEY (`recurring_uid`)
  REFERENCES `dbtest`.`planning` (`recurring_uid`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION
Foreign key constraint fails for table `dbtest`.`#sql-f70_35`:
,
  CONSTRAINT `FK_planning_recurring_uid` FOREIGN KEY (`recurring_uid`) REFERENCES `planning` (`recurring_uid`) ON DELETE NO ACTION ON UPDATE NO ACTION
Trying to add in child table, in index FK_planning_recurring_uid_idx tuple:
DATA TUPLE: 2 fields;
 0: len 36; hex 61393062326434362d313737632d343237302d396537662d396138363766346235363635; asc a90b2d46-177c-4270-9e7f-9a867f4b5665;;
 1: len 4; hex 80000028; asc    (;;

But in parent table `dbtest`.`planning`, in index recurring_uid_index,
the closest match we can find is record:
PHYSICAL RECORD: n_fields 2; compact format; info bits 0
 0: len 30; hex 61393233626432322d623439332d343662392d623435312d393964363363; asc a923bd22-b493-46b9-b451-99d63c; (total 36 bytes);
 1: len 4; hex 80050ffd; asc     ;;

Это не явная ошибка, на которую я надеялся.Не могу ли я создать внешний ключ с нулевыми значениями без предварительной очистки базы данных, или я делаю что-то не так?Я уже проверил значения, которые существуют в одной таблице, которые не существуют в другой, но я не смог найти их.

1 Ответ

0 голосов
/ 04 апреля 2019

Исправлено: SET FOREIGN_KEY_CHECKS=0 перед вставкой внешнего ключа и SET FOREIGN_KEY_CHECKS=1 впоследствии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...