при дублировании ключа происходит сбой с ошибкой «Невозможно добавить или обновить дочернюю строку» - PullRequest
1 голос
/ 29 февраля 2012

У меня есть таблица с составным первичным ключом "name" и "id".Поля на самом деле «имя», «идентификатор», «телефон», «сумма», «единицы», «псевдоним».У меня запрос

 insert into MyTable (name,id,phone,amount) select "henry" as name, id,phone,amount from anotherTable
 on duplicate key update phone=values(phone),amount=values(amount).

MySQL выкладывает следующую ошибку:

 Cannot add or update a child row: a foreign key constraint fails.

Кстати, "id" - это внешний ключ.

Любая помощь?

, как указано ниже, схема для другой таблицы:

 CREATE TABLE `otherTable` (
 `otherId` int(11) NOT NULL AUTO_INCREMENT,
 `DOBId` int(11) NOT NULL,
 `bankAccount` int(11) DEFAULT NULL,
 `partialAmount` int(11) NOT NULL DEFAULT '0',
 `id` int(11) NOT NULL,
 `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `notes` varchar(299) DEFAULT NULL,
 `latitude` decimal(8,5) DEFAULT NULL,
 `longitude` decimal(8,5) DEFAULT NULL,
  PRIMARY KEY (`otherId `),
  KEY `DOBId ` (`DOBId `),
  KEY `bankAccount ` (`bankAccount `),
  KEY `id ` (`id `)
) ENGINE=InnoDB AUTO_INCREMENT=3305 DEFAULT CHARSET=utf8;

для myTable

CREATE TABLE `myTable` (
  `name` int(11) NOT NULL,
  `id` int(11) NOT NULL,
  `appleNumber` int(11) DEFAULT NULL,
  `amount` int(11) DEFAULT NULL,
  `windowsNumber` int(11) DEFAULT NULL,
  `phone` int(11) DEFAULT NULL,
  `pens` int(11) DEFAULT NULL,
  `pencils` int(11) DEFAULT NULL,
  PRIMARY KEY (`name`,`id`),
  KEY `id` (`id`),
  CONSTRAINT `myTable_ibfk_1` FOREIGN KEY (`id`) REFERENCES `yet_another` (`id`)

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Похоже, проблема в том, что ограничение FK, установленное на myTable, ссылается на идентификаторы yet_another, поэтому при вставке идентификаторов из anotherTable вы нарушаете это ограничение FK. Скорее всего, в anotherTable есть идентификаторы, которых нет в таблице yet_another.

Поймите, что это выстрел в темноте на основе абстрактной схемы, которую вы разместили. Если вы хотите получить более точный ответ, мне нужно увидеть фактическую схему.

0 голосов
/ 29 февраля 2012

Дублирующий ключ применяется к первичному ключу.Я так понимаю, вы используете innodb.Это терпит неудачу на ограничении внешнего ключа.Какие значения вашей таблицы MyTable являются внешними ключами?Пожалуйста, опубликуйте оператор create для таблицы, которая показывает все ключи и ограничения для получения более подробной справки.

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

...