2011-07-12 19 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

参照先の列が最初の列として表示される参照先の表には索引がありません。

あなたは(名前、COUNTRYNAME)。はStateProvinceのインデックスが必要ですが、あなたははStateProvinceにインデックスを持っている。(COUNTRYNAME、名前)。インデックスまたはFK参照の順序を逆にしてみてください。

+0

私はちょうど私のfk参照の順序を逆にしなければならなかった。今私はそれについて考えている意味がある。 – benstpierre

0

あなたはcreate文を示さなかったので、私私は確信していませんが、これは、realtorprint_devテーブルがプライマリーキーを持たないことと関係があります。

関連する問題