سؤال

الخطأ هو: لا يمكن إنشاء جدول C.Handsets

كيف أجد المشكلة؟

لقد صنعت قاعدة بيانات ووجدت أن الجداول الأخرى الخاصة بي قد تم إنشاؤها فيها ولكن واحد فقط يعطيني هذا الخطأ.

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

المحلول

هناك شروط يجب أن تكون راضية عن مفتاح خارجي:

  • يجب عليك استخدام محرك تخزين InnoDB في كلا الجدولين.

  • يجب أن تكون أنواع البيانات مطابق في كلا الجدولين. EG Varchar (250) غير مطابق لـ Varchar (255).

  • يجب أن يكون هناك مفتاح أساسي أو قيود فريدة على العمود (العمود) في الجدول الأصل.

  • يجب أن يعلن المفتاح الخارجي الخاص بك نفس العمود (العمود) ، بنفس الترتيب ، مثل تلك الموجودة في المفتاح الأساسي أو القيد الفريد في الجدول الأصل. هذه هي مشكلتك الأكثر احتمالا.

على سبيل المثال ، إذا كان هذا هو الجدول الوالد:

CREATE TABLE PhoneModels (
  make VARCHAR(255),
  model VARCHAR(255),
  PRIMARY KEY (make, model)
);

سيكون ما يلي خطأ لأن المفتاح الأساسي يحتوي على عمودين ، لكن كل مفتاح خارجي يحتوي على عمود واحد.

CREATE TABLE Handsets
(
  ...
  make VARCHAR(255),
  model VARCHAR(255),
  FOREIGN KEY (make) REFERENCES PhoneModels(make),                  // WRONG
  FOREIGN KEY (model) REFERENCES PhoneModels(model)                 // WRONG
);

لا يعمل بهذه الطريقة ؛ يجب أن يكون لديك مفتاح خارجي واحد يشير إلى كلا العمدين.

CREATE TABLE Handsets
(
  ...
  make VARCHAR(255),
  model VARCHAR(255),
  FOREIGN KEY (make, model) REFERENCES PhoneModels(make, model),    // RIGHT
);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top