فشل مفتاح MySQL Forever
-
22-09-2019 - |
سؤال
mysql> ALTER TABLE category ADD CONSTRAINT category_parent_category_id FOREIGN KEY (parent) REFERENCES category(id);
ERROR 1005 (HY000): Can't create table 'sfnews.#sql-244_1' (errno: 150)
DDL على النحو التالي:
Create Table: CREATE TABLE `category` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`parent` bigint(20) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `parent_idx` (`parent`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
لماذا هو خطأ؟
المحلول
يجب أن تكون المرجع الذاتي ممكنًا. ذلك لأن "الوالد" غير موقّع و "ID" ليس كذلك. قم بتغيير عمود معرف تعريفات الجدول إلى
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
وسوف تعمل.
ال المرجعي الدول المتعلقة بالمفاتيح الأجنبية: "يجب أن يكون حجم وعلامة أنواع عدد صحيح هي نفسها"
يبدو أن نفس المشكلة الموصوفة هنا
نصائح أخرى
إذا قمت بفحص حالة محرك InnoDB (SHOW ENGINE InnoDB STATUS
) ، ستحصل على تفسير أكمل:
أحدث خطأ مفتاح خارجي
[...]
لا يمكن العثور على فهرس في الجدول المشار إليه حيث تظهر الأعمدة المشار إليها كأعمدة أولى ، أو أنواع الأعمدة في الجدول والجدول المشار إليه لا يتطابق مع القيد.
يصنع id
غير موقعة.
لا تنتمي إلى StackOverflow