为什么这个MySQL Create Table语句失败了?

时间:2010-12-02 21:53:49

标签: sql mysql mysql-error-1005

使用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;

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

如果省略外键引用,则CREATE TABLE适用于我:

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尚不存在。需要在运行PRODUCTS表的CREATE TABLE语句之前创建C121535_vubridge.MEMBERS

答案 1 :(得分:0)

只需拆分创建表并尝试一个部分。通过这种方式,您应该能够识别出它失败的单行。

答案 2 :(得分:0)

我在参考手册中注意到,如果为CONSTRAINT子句提供了符号子句(在您的情况下,每个子句中的FOREIGN KEY之前的后引用字符串,FK_prAuthorFK_Sponsor)必须在数据库上是唯一的。是吗?如果没有,那么该符号可以省略,InnoDB会自动分配。

类似地,您的FK引用的表可能没有此create语句所期望的结构。