2016-11-01 14 views
2

を追加することはできません私はMySQLのエラー1215が外部キー制約に

---------+------------+---------+-------+---------+--------+ 
    Field | type  | NULL | Key | Deault | Extra | 
------------------------------------------------------------ 
user_id | varchar(50)|  NO | PRI | NULL |  | 

私も次のようにフォーマットされた表historyを持っているし、次のようにフォーマットされた表usersを持っています次のコマンドを取得するerror code 1215: cannot add foreign key constraint.

ALTER TABLE history 
ADD FOREIGN KEY (id) 
REFERENCES users(user_id) 

私は欲しいidが挿入されているエントリがhistoryに挿入された場合、user_idusersに一致するようにします。 history.idの外部キーをusers.user_idにするにはどうすればよいですか?

答えて

1

あなたのコードは正しいですが、あなたのデータ型は正確に一致する必要があります。これは機能しないため、varchar-columnsに異なる照合を使用する可能性が最も高いです。

describeを使用すると照合順序が表示されないので、show create table usersおよびshow create table historyを使用して照合し、照合順序が一致するように照合順序を調整します。

1

history.idがインデックスに登録されていない可能性があります。外部キー制約を追加するには、特定の列を索引付けする必要があります。あなたの歴史(あなたは、テーブルを再作成するために喜んでいる場合)スクリプトを作成するには

、制約を追加する前に、次のように入力します。

INDEX 'id_index' ('id', ASC) 

または現在のテーブルを変更するだけで入力します。

CREATE INDEX id_index 
ON history(id,ASC) 

「ASC」は、昇順で索引付けされることを意味します。

あなたがここにインデックス付けについての詳細を読むことができます:あなたは、「ID」を使用しようとしていないことを確認してください、ちょうど徹底すること、またhttps://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

:あなたがここでのMySQLの外部キーについて読むことができますhttp://dev.mysql.com/doc/refman/5.7/en/create-index.html

外部キー名は一意でなければならないため、外部キーとして複数回使用します。

関連する問題