السلام عليكم ورحمة الله
عملت قاعدة البيانات التالية:
وغلطت أريد حذف ال emp_id المعرف في branch table foreign key لكن يرفض يعطيني الخطاء التالي:
Error Code: 1553. Cannot drop index needed in a foreign key constraint
السبب هو أن هناك قيدًا خارجيًا على عمود emp_id في جدول branch يشير إلى عمود emp_id في جدول employee، أي أنه لا يمكنك حذف عمود emp_id في جدول branch إلا إذا قمت أولاً بحذف جميع الصفوف في جدول branch التي تحتوي على قيم في عمود emp_id.
عليك بالبحث عن جميع الصفوف في جدول branch التي تحتوي على قيم في عمود emp_id من خلال استعلام:
SELECT * FROM branch WHERE emp_id IS NOT NULL;
DELETE FROM branch WHERE emp_id IS NOT NULL;
وبعد حذف جميع الصفوف، تستطيع حذف عمود emp_id من جدول branch كالتالي:
ALTER TABLE branch DROP COLUMN emp_id;
وإن كنت لا ترغب في حذف جميع الصفوف في جدول branch، فميكنك إزالة القيد الخارجي من جدول branch من خلال:
ALTER TABLE branch DROP FOREIGN KEY fk_branch_emp_id;
ظهرت لي هذه الرسالة:
error code: 1828. cannot drop column 'emp_id': needed in a foreign key constraint 'branch_ibfk_1'
قبل حذف العمود "emp_id"، يجب عليك إزالة القاعدة الخارجية التي تشير إلى هذا العمود باستخدام الأمر ALTER TABLE كما يلي:
ALTER TABLE branch DROP FOREIGN KEY branch_ibfk_1;
بعد إزالة القاعدة الخارجية، قم بحذف العمود "emp_id" باستخدام الأمر ALTER TABLE أيضًا:
ALTER TABLE branch DROP COLUMN emp_id;
السبب في هذا الخطأ هو أن عمود emp_id في جدول branch يُستخدم كقيد خارجي على جدول employee. هذا يعني أن هناك صفوفًا في جدول branch تشير إلى صفوف في جدول employee.
أعتقد أنه يمكنك حذف عمود emp_id من جدول branch، ولكن يجب عليك أولاً إزالة القيد الخارجي من جدول employee. يمكنك القيام بذلك باستخدام عبارة ALTER TABLE كما يلي:
ALTER TABLE employee DROP FOREIGN KEY fk_employee_branch;
بعد إزالة القيد الخارجي، يمكنك حذف عمود emp_id من جدول branch باستخدام عبارة ALTER TABLE كما يلي:
ALTER TABLE branch DROP COLUMN emp_id;
التعليقات