2012-02-27 27 views
10

İki farklı tablodan kopyaladığım 2 sütuna sahip bir tablom var. Şimdi yapmak istediğim, hem sütun adları e-postasında hem de aşağıda gösterilen kimlik için yabancı anahtar kısıtlaması veriyor.Yabancı anahtar kısıtlaması vermek için tablo al

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; 

aşağıdaki hatayı alıyorum: Bu açıklamada bir kısıtlama ekleme değildir

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 

cevap

29

, sen kısıtlamayı ekliyoruz s: İki yabancı anahtar maddelerinin her biri ayrı bir anlamı kısıtlama. Yine de, manual'a göre, gerektiğinde tek bir ALTER TABLE deyiminde birçok yabancı anahtar kısıtlaması ekleyebilmeniz gerekir. Her kısıtlamadan önce ADD'u eklemeniz yeterlidir.

Kısıtlama adlarının, eklediğiniz kısıtlamalara tek tek uygulandığını ve bu nedenle belirli bir adın olmasını istiyorsanız ikinci yabancı anahtar için CONSTRAINT name belirtmek isteyebileceğinizi unutmayın. ON UPDATE/ON DELETE ile aynıdır: Doğrudan bunlardan önceki yabancı anahtar için geçerlidir.

Yani, düzeltilmiş açıklamada şöyle olabilir: Bu doğru görünüyor

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

. Tecrübemde, el bileğini kontrata veya endekslere bile yazmam, MySQL'in sahnelerin arkasında kalmasına izin veriyorum. –

+0

Evet, adlandırma isteğe bağlıdır. SQL Server'da da isteğe bağlı olarak, isimleri belirtmeyi tercih ederim. –

+0

Sadece merak, neden? –

İlgili konular