Ограничение внешнего ключа Mysql не выполняется, даже если ключ существует

#mysql

Вопрос:

У меня есть 2 таблицы в базе данных mysql версии 8.0.20 на Amazon RDS с внешним ключом между ними.

когда я пытаюсь вставить во вторую таблицу, я получаю ошибку внешнего ключа, но я убедился, что ключ существует в первой таблице.

 SELECT id_column FROM db.table1 WHERE id_column='123';
 ------------ 
| id_column  |
 ------------ 
| 123        |
 ------------ 
1 row in set (0.00 sec)
 

Затем я бегу:

 INSERT INTO db.table2 (foreign_id, ...) VALUES ('123', ...);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`db`.`table2`, CONSTRAINT `table2_ibfk_1` FOREIGN KEY (`foreign_id`) REFERENCES `table1` (`id_column`))
 

Итак, если идентификатор существует в таблице 1, почему таблица 2 не может использовать его в столбце внешний ключ? что я упускаю?

Комментарии:

1. Проблема с типом данных? Попробуйте ... VALUES (123, ...); указать это значение как целое число, а не как строку.

2. Спасибо! типы данных были varchar(16) и varcahr(32) Я изменил 16 на 32, и это работает! пожалуйста, опубликуйте это в качестве ответа, и я приму его.

3. Никогда , никогда не храните числа в varchar столбцах.

4. Спасибо, идентификатор на самом деле представляет собой хэш из цифр и букв, поэтому необходим varchar

Ответ №1:

Пожалуйста, убедитесь, что типы данных совпадают во всех этих операциях:

  • создание обеих таблиц.
  • создание внешнего ключа и его индекса.
  • вставка строк в обе таблицы.