2017-10-19 19 views
0

外部キーとしてvarchar値を追加しようとしています。MySQL - varcharを外部キーとして追加する

Password_Encryptionテーブル内にKEYを追加しようとしましたが、動作しませんでした。それからINDEXを作成しようとしていて、それもうまくいきませんでした。

エラーは「エラーコード:1215:外部キー制約を追加できません」です。

私は、Password_EncryptionのPRIMARY KEY行のカンマでエラーが発生することを認識しています。

私はこれに関連しているテーブルがある

CREATE TABLE Login (
login_id INT NOT NULL AUTO_INCREMENT, 
login_date DATE NOT NULL, 
customer_id INT DEFAULT 0, 
business_id INT DEFAULT 0, 
password_entered VARCHAR(16) DEFAULT 'password', 
password_encryption VARCHAR(20), 
PRIMARY KEY (login_id, login_date) 
); 

CREATE TABLE Password_Encryption (
encryption_id INT NOT NULL AUTO_INCREMENT, 
login_id INT NOT NULL, 
password_encryption VARCHAR(20), 
password_saved VARCHAR(16) NOT NULL, 
is_valid ENUM('false','true') NOT NULL DEFAULT 'false', 
/*KEY pw_enc (password_encryption),*/ 
PRIMARY KEY (encryption_id), 
/*CONSTRAINT pw_enc FOREIGN KEY (password_encryption) REFERENCES Login 
(password_encryption)*/ 
); 

CREATE INDEX pw_enc ON Password_Encryption(password_encryption); 

ALTER TABLE Password_Encryption 
ADD CONSTRAINT pw_enc FOREIGN KEY (password_encryption) REFERENCES Login (password_encryption); 
+0

また、スタックオーバーフローに関する他の回答も見てきました。私は能力を最大限引き出そうと努力しましたが、まだそれを働かせることはできません。 –

+1

2つのテーブルの関係を記述してください。 –

+0

Password_Encryptionテーブルのpassword_encryption変数は、同じ名前付き変数を持つLoginテーブルから取得された外部キーです。私はそれのコードを知らない。 –

答えて

2

あなたはSHOW ENGINE INNODB STATUS\Gを実行しているとLATEST FOREIGN KEY ERRORセクションを見ることで、より詳細なエラーメッセージを取得することができます。

場合によっては、外部キー制約を作成するために親列(Login.password_encryption)にインデックスを作成する必要があります。

+0

「ユニーク」なのはなぜですか? –

+0

@RickJames true、それは一意である必要はありません。私は私の答えを更新します。 –

+0

それはうまくいきました、ありがとう! –

関連する問題