ограничение внешнего ключа не выполняется после создания базы данных на новом сервере - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь вставить запись, но получаю сообщение об ошибке «Сбой ограничения внешнего ключа». Я искал вокруг и видел, что каждый раз, когда возникает эта проблема, это происходит потому, что первичный ключ записи, которую они пытаются добавить, не существует в таблице, на которую ссылаются. В этом случае я вижу первичный ключ, существующий в ссылочной таблице, но я все еще не могу вставить запись.

Модель с идентификатором модели 171 существует, но при попытке добавить запись model_feature с этим идентификатором происходит сбой:

mysql> select distinct model_id from model;
+----------+
| model_id |
+----------+
|      167 |
|      168 |
|      169 |
|      170 |
|      171 |
+----------+
5 rows in set (0.00 sec)

mysql> INSERT INTO model_feature (feature_position, model_id, feature_name)  VALUES (0, 171, 'my_feature');
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`bpp`.`model_feature`, CONSTRAINT `model_feature_ibfk_1` FOREIGN KEY (`model_id`) REFERENCES `Model` (`model_id`) ON DELETE CASCADE)

Вот подробности model_feature:

mysql> show create table model_feature;
+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table         | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| model_feature | CREATE TABLE `model_feature` (
  `model_id` int(11) DEFAULT NULL,
  `feature_name` varchar(25) DEFAULT NULL,
  `feature_position` int(11) DEFAULT NULL,
  `model_feature_id` int(11) NOT NULL AUTO_INCREMENT,
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`model_feature_id`),
  KEY `model_id` (`model_id`),
  CONSTRAINT `model_feature_ibfk_1` FOREIGN KEY (`model_id`) REFERENCES `Model` (`model_id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1343 DEFAULT CHARSET=utf8 |
+---------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show columns from model_feature;
+------------------+-------------+------+-----+-------------------+-----------------------------+
| Field            | Type        | Null | Key | Default           | Extra                       |
+------------------+-------------+------+-----+-------------------+-----------------------------+
| model_id         | int(11)     | YES  | MUL | NULL              |                             |
| feature_name     | varchar(25) | YES  |     | NULL              |                             |
| feature_position | int(11)     | YES  |     | NULL              |                             |
| model_feature_id | int(11)     | NO   | PRI | NULL              | auto_increment              |
| timestamp        | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+------------------+-------------+------+-----+-------------------+-----------------------------+
5 rows in set (0.00 sec)

Обратите внимание, что у меня есть эта база данных на моем Mac, и я недавно скопировал схему в AWS посредством mysqldump-данных, скопировал их в свой экземпляр, загрузил и удалил записи (я думаю, что есть лучший способ сделать это, но это казалось легким). Именно на экземпляре AWS это терпит неудачу. Такая же вставка отлично работает на моем Mac / OSX.

Любой совет, почему это не удается?

...