لماذا يفشل عبارة إنشاء MySQL هذا؟
-
30-09-2019 - |
سؤال
باستخدام أداة mysqladmin ، أحاول إنشاء جدول. تقوم الأداة بإنشاء عبارة SQL ، ثم تقوم بإعادة "لا يمكن إنشاء جدول" دون أدنى فكرة أخرى عن الخطأ!
ها هو :
CREATE TABLE `C121535_vubridge`.`Products` (
`pr_ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`pr_Name` VARCHAR(45) NOT NULL,
`pr_Type` VARCHAR(2) NOT NULL COMMENT 'H=Hand Series V=VuBridge software E=Event Subs S=Sponsoring',
`pr_AuthorID` INTEGER UNSIGNED COMMENT '= m_ID (for Bridge Hand Series',
`pr_SponsorID` INTEGER UNSIGNED NOT NULL,
`pr_DateCreation` DATETIME NOT NULL,
`pr_Price` FLOAT NOT NULL,
`pr_DescriptionText` TEXT,
`pr_Description` VARCHAR(245),
PRIMARY KEY (`pr_ID`),
CONSTRAINT `FK_prAuthor` FOREIGN KEY `FK_prAuthor` (`pr_AuthorID`)
REFERENCES `Members` (`m_ID`)
ON DELETE SET NULL
ON UPDATE NO ACTION,
CONSTRAINT `FK_Sponsor` FOREIGN KEY `FK_Sponsor` (`pr_SponsorID`)
REFERENCES `Members` (`m_ID`)
ON DELETE SET NULL
ON UPDATE NO ACTION
) ENGINE = InnoDB;
هل يمكن لأحد أن يساعد؟
المحلول
يعمل جدول إنشاء لي إذا حذفت مراجع المفاتيح الخارجية:
CREATE TABLE `Products` (
`pr_ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`pr_Name` VARCHAR(45) NOT NULL,
`pr_Type` VARCHAR(2) NOT NULL COMMENT 'H=Hand Series V=VuBridge software E=Event Subs S=Sponsoring',
`pr_AuthorID` INTEGER UNSIGNED COMMENT '= m_ID (for Bridge Hand Series',
`pr_SponsorID` INTEGER UNSIGNED NOT NULL,
`pr_DateCreation` DATETIME NOT NULL,
`pr_Price` FLOAT NOT NULL,
`pr_DescriptionText` TEXT,
`pr_Description` VARCHAR(245),
PRIMARY KEY (`pr_ID`)
)
... لذلك أنا أميل إلى تصديق ذلك C121535_vubridge.MEMBERS
غير موجود بالفعل. C121535_vubridge.MEMBERS
يجب إنشاء قبل تشغيل عبارة CREATE TABLE لجدول المنتجات.
نصائح أخرى
ما عليك سوى تقسيم جدول إنشاء وجرب جزءًا واحدًا في ذلك الوقت. وبهذه الطريقة ، يجب أن تكون قادرًا على تحديد سطر واحد يفشل فيه.
ألاحظ في الدليل المرجعي أنه إذا تم إعطاء الرمز الفرعي لفقرة القيد (في حالتك ، السلاسل المقبلة قبل المفتاح الخارجي في كل جملة ، FK_prAuthor
و FK_Sponsor
) يجب أن تكون فريدة من نوعها على قاعدة البيانات. هل هم؟ إذا لم يكن الأمر كذلك ، يمكن حذف هذا الرمز وسيتم تعيين Innodb ثم تلقائيًا.
وبالمثل ، فإن الجداول التي تشير إليها FKS قد لا تحتوي على الهيكل الذي يتوقعه هذا البيان.