سؤال

حسنا، لذلك أقوم بإنشاء طاولات في MySQL مع فهارس ومفاتيح أجنبية. يمكنني استخدام Workbench MySQL لإنشاء الجداول ثم يكون له مهندس إلى الأمام سكيندر SQL Script (أفعل أفضل في بيئة Visual DB من مجرد كتابة رمز SQL باليد اليمين).

المشكلة عدة مرات عند استيراد برنامج SQL Script إلى 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;

عادة ما يأتي الخطأ عادة من تعريف الفهرس الأول - حتى عندما أخرج تعريف الفهرس، أحصل على الخطأ في تعريف قيود المفتاح الأجنبي الأول. لقد راجعت، والعمود البعيد الرئيسي الأجنبي والعمود المحلي هو نفس نوع البيانات والحجم.

هل كانت مفيدة؟

المحلول

"errno 121 يعني خطأ في مفتاح مكررة"

يجب أن يكون للقيود اسما فريدا في قاعدة البيانات، قد ترغب في تغيير أسماء FK الخاصة بك. مثل ذلك، FK_groupMembers_group و FK_groupMembers_user.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top