2016-11-28 106 views
1

我使用的是MySQL數據庫,有以下3個表:MySQL的:外鍵約束的格式不正確

map_range enter image description here

map_location(連接表) enter image description here

位置 enter image description here

我想添加一些外鍵。

ALTER TABLE `www`.`map_location` 
ALTER TABLE `www`.`map_location` 
ADD INDEX `fk_map_location_indx` (`LOC_ID` ASC); 
ALTER TABLE `www`.`map_location` 
ADD CONSTRAINT `fk_map_loc_map` 
    FOREIGN KEY (`MAP_ID`) 
    REFERENCES `www`.`map_location` (`MAP_ID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
ADD CONSTRAINT `fk_map_loc_location` 
    FOREIGN KEY (`LOC_ID`) 
    REFERENCES `www`.`location` (`ID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION; 

,但我得到了以下錯誤:

Operation failed: There was an error while applying the SQL script to the database. 
    ERROR 1025: Error on rename of '.\www\#sql-ea0_2b8' to '.\www\map_location' (errno: 150 - Foreign key constraint is incorrectly formed) 
    SQL Statement: 
    ALTER TABLE `www`.`map_location` 
    ADD CONSTRAINT `fk_map_loc_map` 
     FOREIGN KEY (`MAP_ID`) 
     REFERENCES `www`.`map_location` (`MAP_ID`) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION, 
    ADD CONSTRAINT `fk_map_loc_location` 
     FOREIGN KEY (`LOC_ID`) 
     REFERENCES `www`.`location` (`ID`) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION 

enter image description here

讚賞任何想法。

+0

什麼是'www'.'map_location'。 ?這是另一張桌子嗎? – Jagrati

+0

@Jagrati'www'是模式名稱。我正在使用MySQL Workbench,這是它生成的SQL。 – Richard

+0

@Jagrati是的,這是一張上圖。 OP你的mysql版本是什麼?我假設重複的alter table行只是一個複製粘貼錯誤?看起來你試圖將map_id引用到自己 – khuderm

回答

1

你是自我引用相同的表和列。
您的意思是location而不是map_location

ALTER TABLE `www`.`map_location` 
ADD CONSTRAINT... FOREIGN KEY (`MAP_ID`) 
REFERENCES `www`.`map_location` (`MAP_ID`)