2011-01-14 2 views

Antwort

64

Verwenden Sie ALTER TABLE + ADD CONSTRAINT. Z.B. wenn Sie Tabellen Mitglieder und Profilen verknüpfen wollen durch member_id und Kaskade löschen Profile jedes Mal das Element gelöscht wird, können Sie so etwas schreiben:

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

Wenn Sie diese Einschränkung aktualisieren müssen - Sie müssen entferne es dann bei der Erstellung, es gibt keinen direkten Weg, es zu ändern.

+1

War nicht bewusst, dass Sie einen Fremdschlüssel nicht ändern konnten, aber Sie mussten ihn neu erstellen. Sparte mir eine Menge Zeit, danke! –

+0

Benutzt dies auch für "auf UPDATE Kaskade" und funktionierte gut (ganz offensichtlich). Wird für ein umfangreiches Update für viele eingeschränkte Tabellen verwendet. – Diego1974

-2

Wenn der Fremdschlüssel bereits erstellt wurde, gibt es einen Trick, der für mich funktioniert hat. Sie können den Speicherauszug Ihrer Datenbank ändern und mit den Änderungen erneut importieren.

Wenn Sie Mysql und Linux-Shell verwenden, würde es so aussehen:

Zuerst exportieren Sie Ihre Datenbank:

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

Öffnen Sie dann die Datei database.sql und suchen Sie nach der Tabelle du willst ändern.

Fügen Sie am Ende des Fremdschlüsselsatzes ON DELETE CASCADE hinzu und speichern Sie es.

Zweitens importieren Sie Ihre Datenbank mit den Änderungen:

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

Und Sie müssen Ihre ON DELETE CASCADE arbeiten.

+3

Dies ist eine wirklich gefährliche Lösung – CodeMonkey

+0

Oder Sie können Fremdschlüsselprüfungen deaktivieren, ändern Sie Ihre Einschränkung und schalten Sie sie wieder ein, ohne den Overhead der Reimport der gesamten Datenbank. – mopsyd

Verwandte Themen