• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[mySQL]: Nachträgliches Ändern eines FOREIGN KEYs

petz_e

New member
hi,

Ich habe mehrere MySQL tables die wie folgt erstellt wurden:

Code:
CREATE TABLE address (
id INT NOT NULL AUTO_INCREMENT,
ref INT NOT NULL,
no INT, street CHAR(100), country CHAR(100),
PRIMARY KEY (id),
FOREIGN KEY (ref) REFERENCES client (id) ON DELETE CASCADE);
Jetzt will ich ein ON UPDATE CASCADE for die Fremdschlüssel einfügen, also dass das ganze so aussieht:
FOREIGN KEY (ref) REFERENCES client (id) ON DELETE CASCADE ON UPDATE CASCADE);

Ich versuchte ein DROP FOREIGN KEY und ein MODIFY/ALTER TABLE. Die Datenbank liess das nicht zu. Die einzige Möglichkeit ist die gesamten Tabellen zu löschen und direkt richtig zu erstellen, was jedoch einen Haufen Arbeit bei mehr als 25 Tabellen ist... Kann man den Frendschlüssel denn nachträglich nicht mehr ändern?

Patrick
 
Die einzige Möglichkeit ist die gesamten Tabellen zu löschen und direkt richtig zu erstellen, was jedoch einen Haufen Arbeit bei mehr als 25 Tabellen ist... Kann man den Frendschlüssel denn nachträglich nicht mehr ändern?
Ich kann jetzt nichts dazu sagen, ob das möglich sein sollte, oder wo was genaue Problem liegt, dass ALTER TABLE nicht funktioniert, aber Export - Search&Replace - Import ist ein Riesenaufwand? Verstehe ich nicht.
 
wie sah denn der Code genau aus? ALTER TABLE ist eigentlich der richtige Ansatz
Also, das Löschen des Fremdschlüssels sieht so aus:
Code:
mysql> ALTER TABLE address
    -> DROP FOREIGN KEY ref;
ERROR 1025 (HY000): Error on rename of '.\ibs_compta\address' to'.\ibs_compta\#sql2-c40-1' (errno: 152)
Ich habe auch so was probiert, aber das wird nicht richtig von mySQL interpretiert:
Code:
mysql> ALTER TABLE address
    -> MODIFY FOREIGN KEY (ref) REFERENCES company (id) ON DELETE CASCADE ON UPDATE CASCADE;

Patrick
 
Du musst den Foreign key mit seinem Namen angeben, die Spalte auf den er sich bezieht reicht nicht.

Code:
Alter Table address DROP FOREIGN KEY `address_ibfk_1`

Den Namen des Keys erhälst du mit
Code:
SHOW CREATE TABLE address
 
Du musst den Foreign key mit seinem Namen angeben, die Spalte auf den er sich bezieht reicht nicht.

Code:
Alter Table address DROP FOREIGN KEY `address_ibfk_1`

Den Namen des Keys erhälst du mit
Code:
SHOW CREATE TABLE address
Ah, ach so, das kannte ich noch nicht. Vielen Dank für die Hilfe!

Patrick
 
Zurück
Oben