كيفية إصلاح MySQL لا يمكن إضافة خطأ قيد المفتاح الخارجي؟
نشرت: 2022-12-22كيف تصلح الخطأ " لا يمكن لـ MySQL إضافة قيد مفتاح خارجي "؟ قد تتلقى رسالة الخطأ التالية عند محاولة إضافة قيد مفتاح خارجي إلى جدول MySQL: " خطأ 1215 (HY000): لا يمكن إضافة قيد مفتاح خارجي ".
خطأ مثل هذا عام جدًا ولا يوفر تفاصيل محددة بشأن السبب المحدد لعدم تمكن MySQL من إدراج قيد مفتاح خارجي في جدول. لحل هذه المشكلة ، ستحتاج إلى تحديد السبب الدقيق للمشكلة.
تشرح هذه المقالة سبب خطأ MySQL "# 1215 - لا يمكن إضافة قيد مفتاح خارجي" ، وكيفية العثور على السبب ، وكيفية إصلاحه بأربع طرق فعالة.
ما هو سبب خطأ MySQL "# 1215 - لا يمكن إضافة قيد مفتاح خارجي"؟
يمكن أن يكون لهذا الخطأ أسباب متنوعة. لتحديد سبب هذا الخطأ ، من الأفضل فحص قسم "أحدث خطأ مفتاح خارجي" في "حالة INNODB لمحرك العرض".
بهذه الطريقة ، ستحصل على فهم أفضل للمشكلة. ستتمكن من تحديد حالتك من القائمة التالية:
عادة ، عند تحميل عمليات التفريغ ، لا يوجد الجدول أو الفهرس الذي يشير إليه القيد
في بعض الأحيان ، لا يوجد جدول قاعدة البيانات الذي يرغب العملاء في إضافة قيود ، مما يؤدي إلى ظهور رسالة خطأ 1215.
ومع ذلك ، لا يوجد ما يشير إلى عدم وجود الجدول ، لذا يُنصح باستخدام الأمر لتحديد الجداول المتوفرة في قاعدة البيانات.
قم بتشغيل جداول العرض أو إظهار إنشاء جدول في كل من الجداول الأصلية. يشير أي جدول يعرض الخطأ 1146 إلى أن الجداول قد تم إنشاؤها بترتيب غير صحيح.
الحل هو تشغيل CREATE TABLE المفقود والمحاولة مرة أخرى أو تعطيل عمليات التحقق من المفاتيح الخارجية مؤقتًا. من الضروري تنفيذ هذه الخطوة أثناء عمليات الاستعادة الاحتياطية التي قد توجد فيها مراجع دائرية.
قم بتشغيل التعليمات البرمجية التالية لإصلاح الخطأ:
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS; SET FOREIGN_KEY_CHECKS=0; SOURCE /backups/mydump.sql; -- restore your backup within THIS session SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
الجداول أو الفهارس في إشارة القيد علامات اقتباس إساءة الاستخدام
إذا كنت ترغب في تشخيص هذا الخطأ ، فافحص كل إعلان FOREIGN KEY وتأكد من عدم وجود علامات اقتباس حول مؤهلات الكائن أو وجود علامات اقتباس حول الجدول وزوج واحد حول كل اسم عمود.
يمكن حل هذا إما عن طريق عدم الاقتباس من أي شيء أو اقتباس الجدول والعمود بشكل منفصل.
يوجد خطأ مطبعي في المفتاح المحلي أو الجدول الخارجي أو العمود في مراجع القيد
من الممكن تشخيص هذا الخطأ عن طريق تشغيل SHOW TABLES و SHOW COLUMNS ومقارنة السلاسل بتلك المحددة في إعلان REFERENCES الخاص بك. يجب تصحيح الخطأ المطبعي بمجرد اكتشافه.
العمود الذي يشير إليه القيد ليس من نفس النوع أو العرض مثل العمود الخارجي
للتشخيص ، استخدم الأصل SHOW CREATE TABLE للتأكد من احتواء العمود المحلي والعمود المشار إليه على نفس نوع البيانات والعرض.
يمكن حل المشكلة عن طريق تحرير عبارة DDL الخاصة بك للتأكد من أن تعريف العمود في الجدول الفرعي يطابق ذلك الموجود في الجدول الأصل.
الجسم الغريب ليس مفتاحًا من أي نوع
لتشخيص هذه المشكلة ، استخدم الأصل SHOW CREATE TABLE لفحص جزء REFERENCES من الجدول للتأكد من عدم فهرسة العمود الذي يشير إليه.
أصلح المشكلة بجعل العمود إما مفتاحًا رئيسيًا أو مفتاحًا فريدًا أو مفتاحًا أساسيًا.
المفتاح الخارجي هو PK متعدد الأعمدة أو UK ، حيث لا يكون العمود المشار إليه في أقصى اليسار
لتشخيص هذا الخطأ ، قم بتنفيذ الأمر الأصل SHOW CREATE TABLE لتحديد ما إذا كان جزء REFERENCES يشير إلى عمود موجود في بعض الفهارس متعددة الأعمدة ولكنه ليس أقصى اليسار في تعريفه.
يمكنك حل المشكلة عن طريق إضافة فهرس إلى الجدول الأصلي حيث يكون العمود المشار إليه في أقصى اليسار أو العمود الوحيد.
مجموعات أحرف / عمليات ترتيب مختلفة بين الجدولين / العمودين
لتشخيص المشكلة ، قم بتشغيل SHOW CREATE TABLE الأصل وتحقق من تطابق أجزاء العمود الفرعي CHARACTER SET و COLLATE مع تلك الموجودة في الجدول الأصل.
لإصلاح ذلك ، تأكد من أن الجدول الفرعي DDL يطابق مجموعة الأحرف وترتيب الجدول / العمود الأصل ، أو قم بتغيير الجدول الأصل بحيث يتطابق تعريفه مع تعريف الطفل.
الجدول الأصلي لا يستخدم InnoDB
يمكن تشخيص المشكلة عن طريق تشغيل أحد الوالدين SHOW CREATE TABLE والتحقق من ENGINE = INNODB.
بدّل الجدول الأصل للتبديل من MySQL إلى InnoDB لحل هذه المشكلة.
كيف يمكن العثور على سبب الخطأ "لا يمكن إضافة قيد مفتاح خارجي"؟
لا يشير هذا الخطأ إلى السبب المحدد لعدم قدرة MySQL على تنفيذ قيد مفتاح خارجي على الجدول ، وهو عام جدًا.
للمساعدة في حل هذه المشكلة ، ستحتاج إلى تحديد السبب الدقيق. يمكنك القيام بذلك عن طريق تشغيل الاستعلام التالي في عميل MySQL الخاص بك:
SHOW ENGINE INNODB STATUS;
يتم إرجاع ثلاثة حقول من هذا الاستعلام: النوع والاسم والحالة. يمكن تحديد "أحدث خطأ مفتاح أجنبي" من خلال توسيع عمود الحالة للنتيجة.
يهدف هذا القسم إلى تحديد سبب فشل آخر استعلام بديل حتى تتمكن من إصلاح المشكلة.
عادة ما يكون هناك عدم تطابق بين نوع الأعمدة في الجدول الأساسي والجدول الخارجي كسبب لهذه المشكلة.
يمكن أن تحدث المشكلة أيضًا بسبب عدم التوافق بين نوعين من محركات الجدولين ، مثل MyISAM و InnoDB.
من الممكن أيضًا بسبب عمليات الترتيب المختلفة بين الجداول ، أحدهما يستخدم UTF-8 والآخر يستخدم latin1.
يجب الانتباه إلى العوامل التالية:
المحرك : يجب تكوين كل جدول بنفس محرك قاعدة البيانات ، على سبيل المثال ، InnoDB.
نوع البيانات : في جدول واحد ، يجب أن يكون لكلا العمودين نفس " datatype. int(11)
datatype. int(11)
"، بينما ، في حالة أخرى ، سوف يتسبب smallint(5)
في حدوث مشكلة.
الترتيب : لضمان التوافق ، يجب أن تكون كلتا مجموعتي أحرف العمود متطابقتين ، على سبيل المثال ، UTF8.
انتبه : لا يزال من الممكن أن تحتوي الأعمدة على عمود مختلف ، حتى إذا كانت الجداول الخاصة بك لها نفس الترتيب.
فريد : يجب أن تشير المفاتيح الخارجية إلى حقول فريدة في الجدول المرجعي ، وعادة ما تكون الحقول الأساسية.
غير موقّع : من الممكن أن يحتوي أحد الجداول على مفاتيح غير موقعة والآخر لا يحتوي على أي مفاتيح غير موقعة.
كيفية إصلاح خطأ MySQL “# 1215 - لا يمكن إضافة قيد مفتاح خارجي” (4 طرق)؟
بعد مناقشة الأسباب المختلفة لرسالة الخطأ هذه ، انتقلنا إلى الخطوة التالية. يجب إصلاح هذا الخطأ ، لذلك دعونا نرى كيفية القيام بذلك بأربع طرق فعالة.
الطريقة الأولى: تحقق من توفر الجدول
لبدء استكشاف الخطأ وإصلاحها ، يمكنك التحقق مما إذا كان الجدول موجودًا عن طريق تشغيل الأمر التالي:
show tables;
يتضح من هذا الرمز أنه يمكن إنشاء القيد منذ أن كان الجدول متاحًا.
الطريقة 2: تأكد من أن الجدول الرئيسي يستخدم InnoDB
يمكن إجراء مزيد من التحقيق عن طريق التحقق من مجموعة محرك التخزين لجدول قاعدة البيانات. يمكن استخدام الأمر التالي للقيام بذلك:
SHOW CREATE TABLE parent
والنتيجة هي أنك ستجد أن InnoDB ليس محرك التخزين. نظرًا لأن ENGINE = تم تعيين MYISAM ، يمكنك تغيير محرك التخزين عن طريق تشغيل الأمر التالي:
ALTER TABLE parent ENGINE=INNODB;
من الممكن أخيرًا إصلاح الخطأ بهذه الطريقة.
الطريقة الثالثة: تحقق مما إذا كان هناك أي اقتباسات غير مناسبة
لكل إعلان FOREIGN KEY ، تأكد من عدم إدراج علامات اقتباس حول مؤهلات الكائن أو أن علامات الاقتباس المنفصلة تحيط بأسماء الجدول والأعمدة.
باستخدام هذه الطريقة ، من الضروري إما عدم اقتباس أي شيء أو اقتباس العمود والجدول بشكل منفصل لإصلاح الخطأ.
الطريقة الرابعة: التحقق مما إذا كان المفتاح موجودًا أم لا
عند إدخال أوامر MySQL ، من الضروري التأكد من إدخال الأمر الصحيح. يضمن الفحص الشامل أن العميل لا يشير إلى مفتاح جدول غير موجود في الجدول الهدف.
لذلك ، من الضروري تصحيح العملاء حول كيفية استخدام المفتاح الموجود على الطاولة. من الممكن ألا يحتوي العمود المستخدم لـ ON DELETE SET NULL على تعريف فارغ في بعض الحالات.
لمنع خطأ MySQL 1215 ، يجب عليك التأكد من ضبط العمود على القيمة الافتراضية الخالية.
استنتاج
توضح هذه المقالة سبب خطأ MySQL "# 1215 - لا يمكن إضافة قيد مفتاح خارجي" ، وكيفية العثور على السبب ، وكيفية إصلاحه بأربع طرق فعالة.
شكرا لك على الوقت الذي قضيته في مراجعة هذه المقالة. إنه لمن دواعي سرورنا أن نقدمها لك. في قسم التعليقات ، يرجى نشر أي أسئلة أو تعليقات.
يرجى الإعجاب ومتابعة صفحاتنا على Facebook و Twitter إذا كنت ترغب في البقاء على اطلاع بآخر الأخبار.