خطأ في صنع الجدول -mysql
-
29-09-2019 - |
سؤال
الخطأ هو: لا يمكن إنشاء جدول 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
);