2012-05-03 55 views
0

我們無法運行下面的查詢。我們有另一個名爲「person」的表,它有一個主鍵person_id。正如你所看到的,我們試圖把這個列作爲我們的(客戶表)的外鍵。 phpMyAdmin返回#1064語法錯誤。這裏有什麼問題?Innodb不接受外鍵

CREATE TABLE IF NOT EXISTS `resort`.`customers` (
    `person_id` VARCHAR(45) NOT NULL , 
    `cid` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    UNIQUE INDEX `person_id_UNIQUE` (`cid` ASC) , 
    PRIMARY KEY (`person_id`) , 
    UNIQUE INDEX `person_id_UNIQUE` (`person_id` ASC) , 
    CONSTRAINT `person_id` 
    FOREIGN KEY() 
    REFERENCES `resort`.`person`() 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB 

順便說一句,這個查詢是由Oracle的MySQL Workbench生成的。

回答

3

您需要在約束定義的列:

CONSTRAINT person_id 
    FOREIGN KEY() 
    REFERENCES resort.person() 
    ON DELETE CASCADE 
    ON UPDATE CASCADE 

應該是:

CONSTRAINT fk_person_id 
    FOREIGN KEY (person_id) 
    REFERENCES resort.person (id) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE 
+0

現在它說: 「#1061 - 重複鍵名 'person_id_UNIQUE'」 – gzg

+1

吉茲,只是看看你的SQL。這是因爲您有兩個名稱相同的UNIQUE定義:'UNIQUE INDEX person_id_UNIQUE(cid ASC)'和'UNIQUE INDEX person_id_UNIQUE(person_id ASC)'。 'UNIQUE INDEX'後面的部分是索引的名稱。 –