почему нельзя добавить этот внешний ключ?

0

У меня есть эта схема:

CREATE TABLE  `lotto`.`combinaciones` (
  `indice` mediumint(8) unsigned NOT NULL,
  `binario` int(10) unsigned NOT NULL,
  PRIMARY KEY  USING BTREE (`indice`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

CREATE TABLE  `lotto`.`sorteo` (
  `numeroSorteo` int(11) NOT NULL,
  `fechaSorteo` date NOT NULL,
  `precioCarton` double NOT NULL,
  `valorSerial` double NOT NULL,
  `valorMiniserial` double NOT NULL,
  `estatusSorteo` int(11) NOT NULL,
  `cantidadCartones` int(11) NOT NULL,
  PRIMARY KEY  (`numeroSorteo`),
  UNIQUE KEY `fechaSorteo` (`fechaSorteo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

CREATE TABLE  `lotto`.`cartones` (
  `numeroSorteo` int(11) NOT NULL,
  `serial` mediumint(9) NOT NULL,
  `indice` mediumint(8) NOT NULL,
  `binario` int(11) NOT NULL,
  `miniserial` smallint(6) NOT NULL,
  `estatus` tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (`numeroSorteo`,`serial`),
  KEY `new_index` (`indice`), -- ADD LATER
  CONSTRAINT `cartones_ibfk_1` FOREIGN KEY (`numeroSorteo`) REFERENCES `sorteo` (`numeroSorteo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Я пытаюсь добавить это:

ALTER TABLE `lotto`.`cartones` ADD CONSTRAINT `new_fk_56` FOREIGN KEY `new_fk_56` (`indice`)
    REFERENCES `combinaciones` (`indice`)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT;

НО INNODB продолжает жаловаться на то, что не находит индекс:

Cannot find an index in the referenced table where the referenced columns appear as the first columns...

Но это не внешний ключ: combinaciones(indice) тот же, что и внешний ключ sorteo(numeroSorteo)?, который работает

EDIT:

Я тестировал с помощью KEY 'new_index' ( indice ) в lotto.cartones и без него.

  • 0
    Это последняя ошибка внешнего ключа из SHOW ENGINE INNODB STATUS ?
Теги:
foreign-keys
constraints

1 ответ

5
Лучший ответ
`indice` mediumint(8) NOT NULL,

- это не тот же тип, что и

`indice` mediumint(8) unsigned NOT NULL,

Вам нужно сделать оба ваших indice без знака или ни одного из них без знака.

  • 0
    Спасибо, что решили мою проблему!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню