سؤال

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 غير موقعة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top