MySQL Создать таблицу с ошибкой индексов - PullRequest
3 голосов
/ 20 августа 2009

Хорошо, поэтому я создаю таблицы в MySQL с индексами и внешними ключами. Я использую MySQL Workbench для создания таблиц, а затем заставляю его напрямую разрабатывать сценарий создания SQL (я лучше работаю в среде визуальных БД, чем просто пишу код SQL вручную).

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

#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;

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

1 Ответ

4 голосов
/ 21 августа 2009

«errno 121 означает ошибку дубликата ключа»

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

...