Umstellung auf MYSQL 5 - Foreign Keys verschwunden!?

Kahmoon

Erfahrenes Mitglied
Hi,

mein Provider hat mich gestern von MYSQL 4.x.x auf MYSQL 5.0.20 umgestellt. Habe danach die DBs kontrolliert und festgestellt das sämtliche Foreign Keys verschwunden sind und die Tabellentypen auf MYISAM gestellt wurden. Ärgerlich...aber beim Versuch sie wieder auf InnoDB zu stellen macht er es einfach nicht und behält MYISAM bei.

Ist in MYSQL 5 InnoDB nicht erforderlich um mit Foreign Keys zu arbeiten? Wieso kann ich die Tabellen nicht umstellen? Wieso ist InnoDB nicht mal in der Auswahl vorhanden? Wo sind meine Keys hin.....Hilfe ;)

Hab bei der Suche nix passendes gefunden...sorry ;)

Wäre nett wenn mir jemand helfen könnte.

Gruß
Franky
 
Zuletzt bearbeitet:
Ich fürchte, Dein Provider hat MySQL 5 ohne die InnoDB-Engine installiert. Kann das sein? Oder InnoDB ist in der my.cnf (bzw. my.ini auf Windowsserver) deaktiviert.

Was liefert denn das SQL-Statement "SHOW ENGINES"? Da muss bei InnoDB "YES" rauskommen.

edit:
Auch die Ausgabe von SHOW VARIABLES LIKE 'inno%' wäre in diesem Zusammenhang aufschlussreich.
 
Zuletzt bearbeitet:
Kahmoon hat gesagt.:
Fuck it....die haben InnoDb echt disabled.....kann ja nicht sein. Wozu das denn!?

Gibt gleich ne Mail


Zum Beispiel wenn die Serverlast zu hoch war, MyISAM ist schneller (theoretisch) und braucht weniger CPU (auch theoretisch)


Marcus
 
Für mich ist InnoDB ausschließlich dann ein Muss, wenn Transaktionssicherheit gefordert ist. Das ist zwar sehr oft der Fall, wenn aber mal nicht, dann nehme ich gerne die viel schnellere MyISAM-Engine und verzichte auf den ganzen InnoDB-Overhead.

Foreign Keys sind für Relationalität nicht zwingend erforderlich, so lange man die Felder, über die permanent gejoint wird, sauber indiziert und die referentielle Integrität selber im Griff hat - was mir sowieso lieber ist als diese allein dem DBMS zu überlassen.
 
hmm aber wenn ich z.b einen User lösche sollen alle mit ihm verbundenen....meinetwegen postings ebenfalls aus der DB gelöscht werden. Sowas erreiche ich doch nur mittels Foreign Keys oder? Sorry falls diese Frage dämlich ist....so wurde es mir mal gesagt
 
Kahmoon hat gesagt.:
hmm aber wenn ich z.b einen User lösche sollen alle mit ihm verbundenen....meinetwegen postings ebenfalls aus der DB gelöscht werden. Sowas erreiche ich doch nur mittels Foreign Keys oder? Sorry falls diese Frage dämlich ist....so wurde es mir mal gesagt


Nö, machst einfach 2 queries...
 
... oder auch nur 1 Query. JOINs funktionieren auch mit DELETE.

Übrigens ist genau dieses automatische Löschen von Datensätzen etwas, was ich an der "erzwungenen" referenziellen Integrität nicht mag. Es gibt Situationen, da ist das unerwünscht - und diese Situationen sind nicht vorhersehbar. Deshalb mag ich auch keine Delete-Trigger oder ähnliches. Man muss halt beim programmieren der Anwendung gut aufpassen, was sich aber lohnt, da das Debuggen einfacher ist. Mit FKs muss man genauso gut aufpassen und so manches unerwartete Ergebnis erfordert viel Forschungsarbeit. Die Performance leidet auch nicht merklich.

Edit/PS:
Hab' grade festgestellt, dass sich meine Aussage so anhört, als wollte ich von Foreign Keys abraten. Das ist keineswegs der Fall, ich verwende sie selbst auch in vielen Projekten. FKs sind IMHO vielleicht nicht unbedingt "das A & O von Datenbanken", aber sicherlich eine feine Sache und eben auch SQL-Standard. Alles was ich ausdrücken wollte war, dass es auch ohne geht.

@Kahmoon: Wenn Dein Provider einfach so die InnoDB abschafft, dann zeugt das nicht gerade von Professionalität. Denen müsste klar sein, dass da einige User ihte Anwendungen massiv umstricken müssen. Das können die nicht so ohne weiteres machen, das ist eine eindeutige Wertminderung Deines Hostingpaketes. Bevor Du das also einfach so hinnimmst und Deine Anwendung auf MyISAM-Komatibilität umstrickst: "Sue the bastards!"
 
Zuletzt bearbeitet:
Zurück