web-dev-qa-db-ja.com

テーブルを変更して外部キー制約を与える

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
12

このステートメントでは制約を追加していません。追加しています 拘束s:2つのFOREIGN KEY句のそれぞれは、個別の制約を意味します。それでも、 manual によると、単一の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;
33
Andriy M