2011-07-12 37 views
3

我試圖強制在用戶的地址信息中的州/省和國家名稱來自一組表,我列出了國家和州/省。爲了做到這一點,我試圖運行一個像這樣的alter table命令...在MySQL5中添加複合外鍵失敗

ALTER TABLE User 
    ADD FOREIGN KEY (stateProvince,country) 
    REFERENCES `StateProvince`(`name`,`countryName`); 

然後,我得到這個消息...

與國外創建表 'realtorprint_dev /#SQL-d5c_3d'鍵 約束失敗。引用表中沒有索引, 引用列顯示爲第一列。

有沒有人有一個想法如何處理這個錯誤信息?

下面是創建國家與國家的表...

CREATE TABLE Country (
    name varchar(40) NOT NULL, 
    abbreviation varchar(4) NOT NULL, 
    PRIMARY KEY (name) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE StateProvince (
    countryName varchar(40) NOT NULL, 
    name varchar(100) NOT NULL, 
    abbreviation varchar(3) NOT NULL, 
    PRIMARY KEY (countryName,name) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

alter table StateProvince 
add constraint FK_StateProvince_Country 
foreign key (countryName) 
references Country (name); 

現在的用戶表...

create table realtorprint_dev.user (
    id bigint not null, 
    created datetime, 
    email varchar(255) not null, 
    fax varchar(255), 
    mobile varchar(255), 
    name varchar(255), 
    password varchar(255), 
    phone varchar(255), 
    title varchar(255), 
    tollFree varchar(255), 
    updated datetime, 
    web varchar(255), 
    brokerage_id bigint, 
    address varchar(255), 
    city varchar(255), 
    country varchar(255), 
    stateProvince varchar(255), 
    type varchar(255), 
    zipPostal varchar(255), 
    activated bit not null, 
    locked bit not null, 
    primary key (id), 
    foreign key FK285FEB6722226 (brokerage_id) references brokerage(id) 
); 

回答

4

在引用表中沒有引用列作爲第一列出現的索引。

你需要StateProvince(名稱,國家名稱)的索引,但你StateProvince(國家名稱,名稱)有一個索引。嘗試顛倒您的索引或您的FK參考的順序。

+0

我只是在我的fk參考中顛倒了順序。現在我想到了它是有道理的。 – benstpierre

0

既然你沒有表現出create語句我我不確定,但我認爲這與realtorprint_dev表沒有主要關鍵。