为什么此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
需要在运行产品表的创建表语句之前创建。
其他提示
只需将创建表分开并在当时尝试一个零件即可。这样,您应该能够识别其失败的单行。
我确实在参考手册中注意到,如果为约束子句提供了一个符号(在您的情况下,在每个子句中的外键之前的背报字符串, FK_prAuthor
和 FK_Sponsor
)必须在数据库上是唯一的。他们是吗?如果没有,则可以省略该符号,并且可以自动分配InnoDB。
同样,您的FKS所指的表可能没有此创建语句期望的结构。
不隶属于 StackOverflow