#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:
Пожалуйста, убедитесь, что типы данных совпадают во всех этих операциях:
- создание обеих таблиц.
- создание внешнего ключа и его индекса.
- вставка строк в обе таблицы.