MySQL Workbench إعادة تسمية القيد
-
30-09-2019 - |
سؤال
يمكنني استخدام 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 على نموذج التبويب.
نصائح أخرى
عندما تقوم بتعيين قيود على المفاتيح الأجنبية ، فلن تقوم بتعيين اسم مختلف يشير إلى نفس المفتاح الأساسي لبعض الجدول. لذا ، ما أحاول قوله هو التحقق من جميع أسماء الفهرس في جميع البرامج النصية التي تم إنشاؤها إذا كان هناك أي ازدواجية. إعادة تسمية لبعض الآخرين. ثم يمكنك المتابعة ...