2012-02-27 15 views
10

2つの異なるテーブルからコピーした2つのカラムを持つテーブルがあります。私が今したいのは、以下に示すカラム名emailとidの両方に外部キー制約を与えることです。外部キー制約を与えるためにテーブルを変更する

ALTER TABLE users_role_map 
ADD CONSTRAINT FK_users_role_map 
FOREIGN KEY (email) REFERENCES usert(email), 
FOREIGN KEY (id) REFERENCES rolet(id) 
ON UPDATE CASCADE 
ON DELETE CASCADE; 

私は次のエラーを取得する:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use near 'FOREI 
GN KEY (id) REFERENCES rolet(id) 
ON UPDATE CASCADE 
ON DELETE CASCADE' at line 4 

答えて

29

あなたはこの文で制約を追加していない、あなたは制約を追加している2つのFOREIGN KEY句のそれぞれが別々の意味制約。それでも、manualによれば、必要に応じて1つのALTER TABLEステートメントに多くの外部キー制約を追加できるはずです。すべての制約の前にADDを含めるだけです。

制約名は追加する制約に個別に適用されるため、特定の名前を持つ場合は、2番目の外部キーにCONSTRAINT nameを指定することをお勧めします。 ON UPDATE/ON DELETEと同じです。それらは、それらの直前にある外部キーに適用されます。

ので、訂正文は次のようになります。これは正しいよう

ALTER TABLE users_role_map 

ADD CONSTRAINT FK_users_role_map1 
FOREIGN KEY (email) REFERENCES usert(email) 
ON UPDATE CASCADE ON DELETE CASCADE, 

ADD CONSTRAINT FK_users_role_map2 
FOREIGN KEY (id) REFERENCES rolet(id) 
ON UPDATE CASCADE 
ON DELETE CASCADE; 
+1

。私の経験では、手作業で制約やインデックスを指定することさえできませんでした。 –

+0

はい、命名はオプションです。オプションでもあるSQL Serverでは、名前を指定する方が好きです。 –

+0

好奇心が強いのはなぜですか? –

関連する問題