2010-12-02 87 views
1

使用mySQLAdmin工具,我嘗試創建一個表。該工具生成SQL語句,然後重新裝入「無法創建表」,但沒有其他線索說明它是什麼錯誤!爲什麼這個MySQL Create Table語句失敗?

這就是:

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

的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

0

只需分割創建表並嘗試當時的一部分。通過這種方式,您應該能夠識別失敗的單一行。

+0

很可能是現有的數據失敗的約束,或者是否給出了單獨的錯誤? – Orbling 2010-12-02 22:01:24

0

在參考手冊中我注意到,如果爲CONSTRAINT子句給出符號子條款(對於您的情況,每個子句中的FOREIGN KEY FK_prAuthorFK_Sponsor)必須在數據庫上是唯一的。他們?如果沒有,該符號可以省略,InnoDB將自動分配。

同樣,您的FKs引用的表可能沒有此創建語句期望的結構。

相關問題