ошибка 1215 MYSQL Не удается добавить ограничение внешнего ключа,

У меня есть этот код:

CREATE  TABLE IF NOT EXISTS `biblioteca`.`ejemplar` (

  `idejemplar` INT(11) NOT NULL AUTO_INCREMENT ,

  `estado` VARCHAR(45) NOT NULL ,

  `comentario` VARCHAR(45) NULL ,

  `isbn` VARCHAR(45) NOT NULL ,

  PRIMARY KEY (`idejemplar`) ,

  INDEX `fk_ejemplar_libro1_idx` (`isbn` ASC) ,

  CONSTRAINT `fk_ejemplar_libro1`

    FOREIGN KEY (`isbn` )

    REFERENCES `biblioteca`.`libro` (`isbn` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

и таблица, которая делает ссылку:

CREATE  TABLE IF NOT EXISTS `biblioteca`.`libro` (
  `isbn` VARCHAR(25) NOT NULL ,
  `idcategoria` INT(11) NOT NULL ,
  `ideditorial` INT(11) NOT NULL ,
  `titulo` VARCHAR(45) NOT NULL ,
  `autor` VARCHAR(45) NOT NULL ,
  `reseña` VARCHAR(45) NULL ,
  PRIMARY KEY (`isbn`) ,
  INDEX `fk_libro2_idx` (`idcategoria` ASC) ,
  INDEX `fk_libro3_idx` (`ideditorial` ASC) ,
  CONSTRAINT `fk_libro2`
    FOREIGN KEY (`idcategoria` )
    REFERENCES `biblioteca`.`categoria` (`idcategoria` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_libro3`
    FOREIGN KEY (`ideditorial` )
    REFERENCES `biblioteca`.`editorial` (`ideditorial` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;

и я думаю, что внешние ключи хороши.


person user2561784    schedule 08.07.2013    source источник
comment
другая таблица biblioteca innodb?   -  person exussum    schedule 08.07.2013
comment
biblioteca — это схема, ejemplar и libro — это innoDB   -  person user2561784    schedule 08.07.2013
comment
В этом случае там есть значение, которое не существует, используйте левое соединение, чтобы узнать, какое   -  person exussum    schedule 08.07.2013
comment
но я создаю таблицу, у меня есть эта ошибка, когда я делаю форвард-инженер на верстаке   -  person user2561784    schedule 08.07.2013


Ответы (1)


Если это свежие таблицы без значений, похоже на ошибку со столбцами

у одного есть varchar(25) у другого var_char(45) делают их одинаковыми

редактировать:

CREATE  TABLE IF NOT EXISTS `biblioteca`.`libro` (
  `isbn` VARCHAR(45) NOT NULL ,
  `idcategoria` INT(11) NOT NULL ,
  `ideditorial` INT(11) NOT NULL ,
  `titulo` VARCHAR(45) NOT NULL ,
  `autor` VARCHAR(45) NOT NULL ,
  `reseña` VARCHAR(45) NULL ,
  PRIMARY KEY (`isbn`) ,
  INDEX `fk_libro2_idx` (`idcategoria` ASC) ,
  INDEX `fk_libro3_idx` (`ideditorial` ASC) )

ENGINE = INNODB
DEFAULT CHARACTER SET = utf8;



CREATE  TABLE IF NOT EXISTS `biblioteca`.`ejemplar` (

  `idejemplar` INT(11) NOT NULL AUTO_INCREMENT ,

  `estado` VARCHAR(45) NOT NULL ,

  `comentario` VARCHAR(45) NULL ,

  `isbn` VARCHAR(45) NOT NULL ,

  PRIMARY KEY (`idejemplar`) ,

  INDEX `fk_ejemplar_libro1_idx` (`isbn` ASC) ,

  CONSTRAINT `fk_ejemplar_libro1`

    FOREIGN KEY (`isbn` )

    REFERENCES `biblioteca`.`libro` (`isbn` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = INNODB

DEFAULT CHARACTER SET = utf8;

у меня работает без проблем. Я забрал два других ключа, для которых у меня нет схем.

person exussum    schedule 08.07.2013
comment
Это хороший совет. Но это не причина сообщения об ошибке. - person ypercubeᵀᴹ; 08.07.2013