1

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

有人可以帮忙吗?

4

3 回答 3

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

于 2010-12-02T22:01:43.130 回答
0

只需拆分创建表并尝试其中的一部分。这样,您应该能够识别出失败的单行。

于 2010-12-02T22:00:12.677 回答
0

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

同样,您的 FK 引用的表可能不具有此 create 语句所期望的结构。

于 2010-12-02T22:06:15.827 回答