كيفية تغيير جدول لإضافة علاقة انضمام الذات؟
-
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
);
لا تنتمي إلى StackOverflow