MySQL Создает таблицу с ошибкой индексов
-
19-09-2019 - |
Вопрос
Итак, я создаю таблицы в 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
.