2011-01-14 19 views

cevap

64

ALTER TABLE + ADD CONSTRAINT kullanın. Örneğin. O kısıtlamayı güncellemeniz gerekir ise

ALTER TABLE profiles 
    ADD CONSTRAINT `fk_test` 
    FOREIGN KEY (`member_id`) 
    REFERENCES `members` (`member_id`) 
    ON DELETE CASCADE 

- Eğer gerekecek: Eğer member_id tarafından tabloları üyeleri ve profillerini bağlamış ve kaskad profilleri üye silinir her zaman silmek istiyorsanız, böyle bir şey yazabilirsiniz sonra kaldırın ve tekrar oluşturun, değiştirmenin doğrudan bir yolu yoktur. yabancı anahtar zaten oluşturulursa

ALTER TABLE profiles DROP FOREIGN KEY `fk_test` 
+1

Yabancı bir anahtarı değiştiremediğinizin farkında değildiniz, ancak bunu yeniden oluşturmanız gerekiyordu. Bana çok zaman ayırdı teşekkür ederim! –

+0

Bunu "UPDATE kaskadında" için de kullandı ve iyi çalıştı (oldukça açık bir şekilde). Çok kısıtlı tablolarda büyük güncellemeler için kullanılır. – Diego1974

-2

, benim için çalışan bir hile var. Veritabanınızın dökümünü değiştirebilir ve değişikliklerle tekrar içe aktarabilirsiniz. Eğer MySQL ve Linux kabuk kullanıyorsanız

, böyle olurdu:

İlk olarak, veritabanı ihracat: Sonra

$ mysql -u <user> -p <namedatabase> > database.sql 

database.sql dosyasını açmak ve tablo arayın değiştirmek istiyorsun.

Yabancı anahtarın sonundaki ON DELETE CASCADE'u ekleyin ve kaydedin.

$ mysql -u <user> -p <namedatabase> < database.sql 

Ve siz CASCADE çalışma SİL sahip olacaktır:

İkincisi, değişikliklerle veritabanı ithal.

+3

Bu gerçekten tehlikeli bir çözümdür. – CodeMonkey

+0

Ya da tüm veritabanını yeniden yüklemeksizin, yabancı anahtar denetimlerini devre dışı bırakabilir, kısıtlamanızı değiştirebilir ve yeniden açabilirsiniz. – mopsyd