كيفية تغيير جدول لإضافة علاقة انضمام الذات؟

StackOverflow https://stackoverflow.com/questions/3591245

  •  01-10-2019
  •  | 
  •  

سؤال

لديّ جدول يسمى "المستخدمين" يحتوي على بعض الحقول مثل المعرف ، ParentId ، الاسم.
ما أريده هو تغيير هذا الجدول لإضافة علاقة جديدة للانضمام الذاتي بحيث يكون رابط ParentId إلى ID ، لكن ParentId قابلة للإلغاء. أريد أن أكتب هذا إحصاء SQL المتغير في MySQL دون إسقاط الجدول.

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

المحلول

هل تقصد أنك تريد إضافة قيود مفتاح خارجي؟ إذا كان الأمر كذلك ، انظر قيود المفاتيح الخارجية مستندات. إليك مثال ، بدءًا من إنشاء جدول بسيط:

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `parent_id` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

إضافة فهرس ل parent_id عمودي:

ALTER TABLE users
ADD INDEX `parent_id` (`parent_id`);

أضف قيود المفتاح الخارجي:

ALTER TABLE users
ADD CONSTRAINT `fk_parent_id`
FOREIGN KEY `parent_id` (`parent_id`)
REFERENCES `users` (`id`);

إظهار هيكل الجدول الجديد:

SHOW CREATE TABLE users;

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `parent_id` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `parent_id` (`parent_id`),
  CONSTRAINT `fk_parent_id`
    FOREIGN KEY (`parent_id`)
    REFERENCES `users` (`id`)
) ENGINE=InnoDB;

نصائح أخرى

alter table Users add constraint parent foreign key (ParentId) references
  Users (Id);

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

اختر من users أين parent_id لا في (حدد معرف من users);

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