使用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;
有人可以帮忙吗?
答案 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_prAuthor
和FK_Sponsor
)必须在数据库上是唯一的。是吗?如果没有,那么该符号可以省略,InnoDB会自动分配。
类似地,您的FK引用的表可能没有此create语句所期望的结构。