2016-09-02 13 views
0

問題があります。私は主キーと2つの外部キーでMySQLでテーブルを作成しました。 2つの外部キーCとRは、ペアとして一意でなければなりません。瞬間のためにこれは動作します。MySQLは制約を一意に更新します

しかし、私は新しいシステム機能のために3番目のキーCR_Newを追加することを決めました。 C_ID、R_ID、CR_Newの組み合わせが一意でなければなりません。しかし、それはインターネットで既に見つけられたソリューションでさえ、うまくいきません。外部キーを削除するとエラー1553が発生します。 CR_Newが異なる場合、キーC_IDとR_IDの組み合わせは複数回使用できます。

CREATE TABLE CR(
CR_ID INT UNSIGNED NOT NULL AUTO_INCREMENT, 
CR_Grade TINYINT NOT NULL DEFAULT 0, 
C_ID INT UNSIGNED NOT NULL, 
R_ID INT UNSIGNED NOT NULL, 
PRIMARY KEY(CR_ID), 
FOREIGN KEY(C_ID) REFERENCES C(C_ID), 
FOREIGN KEY(R_ID) REFERENCES R(R_ID), 
CONSTRAINT UNIQUE(R_ID, C_ID)); 

ALTER TABLE CR ADD COLUMN CR_New INT; 
UPDATE CR SET CR_New = 42; 

ALTER TABLE CR ADD CONSTRAINT UNIQUE (C_ID, R_ID, CR_New); 

ALTER TABLE CR DROP FOREIGN KEY C_ID; 
ALTER TABLE CR DROP FOREIGN KEY R_ID; 
ALTER TABLE CR DROP INDEX C_ID; 
ALTER TABLE CR DROP INDEX R_ID; 

あなたは私はそれから持っていると思います使用するかを知りたい場合は:ただ、Cは学生である想像R対象とCR_New年、およびCR_Grade学生のグレード。今は、単に科目の成績を保存することは可能ですが、毎年科目の成績を保存するためにそれを拡張したいと思います。

これはオリジナルではありませんが、同じように動作します。

+0

あなたは古い独自の制約を落とす必要がありますhttp://stackoverflow.com/questions/3487691/dropping-unique-constraint-from-mysql-table – Mike

+0

どのように私は古いユニーク制約の名前?私はIDが表示されていることを知っていますが、どのようにこの名前を付けるべきですか? –

+0

http://stackoverflow.com/questions/3024981/list-of-constraints-from-mysql-database – Mike

答えて

0

新しいテーブルを作成して問題を解決しました。それらを私のデータで満たした後、私は彼らの名前を変更し、今それは動作します。テストデータベースのためにうまく動作する必要があります:-)

関連する問題