فشل الخلية خطأ رقم 150 إنشاء على غير المفتاح الخارجي موجود

StackOverflow https://stackoverflow.com/questions/1206850

  •  05-07-2019
  •  | 
  •  

سؤال

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

ولقد حذف الآن t_order_items الجدول الأصلي ولكن لا أستطيع تسمية t_order_items2 إلى t_order_items، فإنه فشل مع خطأ 150.

وSO أنا أحسب أود أن صياغة فوق إنشاء بيان والخروج من المسؤول فقط في حال كانت المشكلة. فشل التالية إنشاء العلومات ولكن فقط إذا كان يتم استدعاء الجدول t_order_items أي اسم آخر وsuccededs:

DROP TABLE IF EXISTS `web2print`.`t_order_items`;
CREATE TABLE  `web2print`.`t_order_items` (
  `orderID` bigint(20) NOT NULL,
  `productID` bigint(20) NOT NULL,
  `itemprice` decimal(10,2) NOT NULL,
  `itemvat` decimal(2,2) NOT NULL DEFAULT '0.15',
  `quantity` int(10) unsigned NOT NULL,
  `description` varchar(100) NOT NULL,
  `stockCode` varchar(45) DEFAULT NULL,
  `proofpath` varchar(300) DEFAULT NULL,
  `consignmentID` bigint(20) unsigned NOT NULL,
  `name` varchar(45) NOT NULL,
  `order_itemID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`order_itemID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

إذا أتحقق من إخراج إظهار ENGINE ك InnoDB الوضع؛

وأحصل على تقرير المفتاح الخارجي التالية خطأ الذي هو الوقت الصحيح لإدراج ولكن المراجع المفاتيح الخارجية من الجدول القديم (الأصلي) التي تم حذفها، وعدم وجود على هذا السيناريو خلق.

خطأ في قيد مفتاح خارجي من الجدول web2print / t_order_items: لا يوجد أي مؤشر في الجدول الذي سيتضمن الأعمدة كما الأعمدة الأولى، أو أنواع البيانات في الجدول لا تتطابق مع تلك الموجودة في الجدول المشار إليه أو واحدة من أعمدة فارغة ON ... SET أعلن NOT NULL. قيد: ،   CONSTRAINT "FK_t_order_items_1" المفتاح الخارجي ( "معرف الطلب") مراجع "t_orders" ( "معرف الطلب") على تتالي حذف ON UPDATE CASCADE

وليس هناك مفاتيح خارجية على الطاولة؟ ما حذفت.

والأعمال التالي

 SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `web2print`.`t_order_items`;
CREATE TABLE  `web2print`.`t_order_items` (
  `orderID` bigint(20) NOT NULL,
  `productID` bigint(20) NOT NULL,
  `itemprice` decimal(10,2) NOT NULL,
  `itemvat` decimal(2,2) NOT NULL DEFAULT '0.15',
  `quantity` int(10) unsigned NOT NULL,
  `description` varchar(100) NOT NULL,
  `stockCode` varchar(45) DEFAULT NULL,
  `proofpath` varchar(300) DEFAULT NULL,
  `consignmentID` bigint(20) unsigned NOT NULL,
  `name` varchar(45) NOT NULL,
  `order_itemID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`order_itemID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS = 1;

ولكن لماذا علي أن أفعل ذلك؟

وشكرا لأي ردود فعل

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

المحلول

هل كان لديك القيود بين t_order_items وt_orders التي كانت تحاول التحقق من صحة. كان عليك أن تعطيلها أولا قبل أن إسقاط الجدول. هذا أمر جيد لأنه يحميك والبيانات الخاصة بك. قد تم حذف مفاتيح الأجنبية، ولكن القيود لا.

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