Вопрос

Итак, я создаю таблицы в MySQL с индексами и внешними ключами.Я использую MySQL Workbench для создания таблиц, а затем перенаправляю его в SQL create script (у меня лучше получается в среде visual DB, чем просто сразу писать SQL-код вручную).

Проблема в том, что много раз, когда я импортирую sql-скрипт в mysql, я получаю классическую ошибку:

#1005 - Can't create table 'db.tablename' (errno: 121) 

Каждый раз мне удавалось разобраться с проблемой, обычно связанной с индексом / внешним ключом, но теперь я начинаю раздражаться из-за необходимости каждый раз ее исправлять.Я действительно не понимаю, в чем проблема (особенно когда продукт MySQL создает sql-код для своей собственной базы данных).Ниже приведен некоторый код, который обычно вызывает проблему.

CREATE  TABLE IF NOT EXISTS `db`.`groupMembers` (
  `groupMembersID` INT NOT NULL AUTO_INCREMENT ,
  `groupID` INT NOT NULL ,
  `userID` INT NULL ,
  PRIMARY KEY (`groupMembersID`) ,
  INDEX `group` (`groupID` ASC) ,
  INDEX `user` (`userID` ASC) ,
  CONSTRAINT `group`
    FOREIGN KEY (`groupID` )
    REFERENCES `db`.`groups` (`groupsID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `user`
    FOREIGN KEY (`userID` )
    REFERENCES `db`.`users` (`usersID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB;

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

Это было полезно?

Решение

"ошибка № 121 означает ошибку дубликата ключа"

Ограничения должны иметь уникальное имя в базе данных, возможно, вы захотите изменить свои FK-имена.Вот так, FK_groupMembers_group и FK_groupMembers_user.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top