سؤال

يمكنني استخدام Workbench MySQL لتصميم قاعدة البيانات الخاصة بي ومن ثم لتصدير البرنامج النصي SQL Create. ولكن عندما أقوم بتشغيل هذا البرنامج النصي لإنشاء قاعدة البيانات ، أحصل على خطأ - Errno: 121.

اتضح أن Workbench MySQL يعطي قيودتين نفس الاسم ، لأن كلا القيدتين تستخدم نفس المفتاح (لدي جدول مع "roboid" المفتاح الأساسي وأشار إلى هذا المفتاح في جدولين آخرين).

هل هناك أي طريقة يمكنني من خلالها إعادة تسمية القيد مباشرة في المصمم ، لذلك عندما أقوم بإعادة توجيه البرنامج النصي SQL ، لن يعطي أي أخطاء؟

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

جزء من البرنامج النصي الذي تم إنشاؤه والذي يخلق الخطأ:


CREATE  TABLE IF NOT EXISTS users.roles (
  roleID INT NOT NULL AUTO_INCREMENT ,
  ...
  PRIMARY KEY (roleID) ,
  ...);

إنشاء جدول إذا لم يكن موجودًا users.userRoles ( ... roleID int ليس فارغا ، ... القيد roleIDمفتاح غريب (roleID ) المراجع users.roles (roleID ));

إنشاء جدول إذا لم يكن موجودًا users.resourcePrivileges ( roleID int ليس فارغا ، ... القيد roleIDمفتاح غريب (roleID ) المراجع users.roles (roleID ));

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

المحلول

لست متأكدا كيف انتهى بك الأمر مع ذلك. أخذت طاولة عمل MySQL لتدور ، أنشأت طاولتين مع FK وإنشاء

-- -----------------------------------------------------
-- Table `mydb`.`users`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`users` (
  `idusers` INT NULL ,
  PRIMARY KEY (`idusers`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`usersRoles`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`usersRoles` (
  `users_idusers` INT NOT NULL ,
  PRIMARY KEY (`users_idusers`) ,
  CONSTRAINT `fk_usersRoles_users`
    FOREIGN KEY (`users_idusers` )
    REFERENCES `mydb`.`users` (`idusers` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

لاحظ أن القيد له اسم فريد "FK_USERSROLES_USERS" الذي لن يتم تكراره لأنه يستخدم أسماء الجدول. فقط من أجل المتعة ، أضفت علاقة أخرى بين نفس الجداول وإق

-- -----------------------------------------------------
-- Table `mydb`.`usersRoles`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`usersRoles` (
  `users_idusers` INT NOT NULL ,
  `users_idusers1` INT NOT NULL ,
  PRIMARY KEY (`users_idusers`, `users_idusers1`) ,
  INDEX `fk_usersRoles_users1` (`users_idusers1` ASC) ,
  CONSTRAINT `fk_usersRoles_users`
    FOREIGN KEY (`users_idusers` )
    REFERENCES `mydb`.`users` (`idusers` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_usersRoles_users1`
    FOREIGN KEY (`users_idusers1` )
    REFERENCES `mydb`.`users` (`idusers` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

وهي مرة أخرى هي مشكلة غير (كل ما سبق تم إنشاؤه تلقائيًا - لقد قمت فقط بتعيين أسماء الجدول ، والمفتاح الأساسي على الجدول المشار إليه وأضفت اثنين 1: N العلاقات)

ملاحظات: الإصدار 5.2.30.

تعديلربما حدث شيء مع تفضيلاتك. يتم تعريف الاسم الافتراضي لقيود FK على نموذج التبويب.

نصائح أخرى

الخطأ 121 بسبب الازدواجية اسم القيد.solution exampleبشكل عام عند إنشاء البرنامج النصي SQL الخاص بك مع خيار تصدير MySQL للأمام الهندسي ، لحل المشكلة التي نحتاجها فقط للتأكد من أن "أسماء المفاتيح الخارجية" فريدة من نوعها في SQL Script/ Schema.

عندما تقوم بتعيين قيود على المفاتيح الأجنبية ، فلن تقوم بتعيين اسم مختلف يشير إلى نفس المفتاح الأساسي لبعض الجدول. لذا ، ما أحاول قوله هو التحقق من جميع أسماء الفهرس في جميع البرامج النصية التي تم إنشاؤها إذا كان هناك أي ازدواجية. إعادة تسمية لبعض الآخرين. ثم يمكنك المتابعة ...

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