5. Oktober 200619 j hi, folgender fall habe Tabellen A und B A hat eine 1:n Beziehung zu B ergo, in phpmyadmin - beziehungsĂŒbersicht ist fĂŒr B der PrimĂ€rschlĂŒssel A_ID der tabelle A angegeben. onupdate und ondelete "NO ACTION" leider kann ich jetzt nicht sagen, A_ID von B = 0. Also, dieser Datensatz von B hat eben "keinen" A-Datensatz ĂŒbergeordnet. da bekomme ich dann den fehler "Cannot add or update a child row: a foreign key constraint fails" bisher war der FremdschlĂŒssel auf einem Wert. Aber jetzt muss ich eben die Verbindung lösen. kann mir jemand sagen was ich einstellen muss damit er auch "0" als FremdschlĂŒssel-Wert akzeptiert ? danke
5. Oktober 200619 j Hi, 0 ist ein Wert kein Wert ist bei sql NULL Ob NULL akzeptiert wird, hĂ€ngt auch von der Konfiguration der Tabellenspalte fĂŒr den FremdschlĂŒssel ab. GruĂ Jaraz
5. Oktober 200619 j das ganze nennt sich meines Wissens referentielle IntegritÀt und ist auch so beabsichtigt. DU musst zuerst die Beziehung löschen und erst dann den Datensatz. Das heisst der Datensatz aus B muss gelöscht werden, dann der aus A. Du kannst aber nicht das Feld, selbststÀndig löschen oder manuell Àndern wo kein DS in A entsprechend vorliegt.
10. Oktober 200619 j ja, das ist referenzielle IntegritÀt, scheint nur in InnoDB besch**** umgesetzt zu sein. Selbst wenn die beziehung richtig eingestellt ist (wenn A gelöscht wird, lösche alle von B die damit verbunden sind) gibts nur fehlermeldung. *ARGH* da handle ich die IntegritÀt lieber durch die Datenabstraktionsschicht der Anwendung.
10. Oktober 200619 j Klar, eine Engine die Millionenfach eingesetzt wird, arbeitet fehlerhaft und nur du merkst es. Wenn z.B. auf die zu löschenden DatensĂ€tze weitere Referenzen liegen, könnten die natĂŒrlich nicht gelöscht werden. GruĂ Jaraz
10. Oktober 200619 j ja, das ist referenzielle IntegritĂ€t, scheint nur in InnoDB besch**** umgesetzt zu sein.Wenn es tatsĂ€chlich so einfach wĂ€re: Glaubst du nicht, dann wĂ€re diese einfache(re) Lösung schon lĂ€ngst implementiert? Oder anders ausgedrĂŒckt: Wenn es tatsĂ€chlich so schlecht umgesetzt worden ist, dann stelle einen Bug ein oder setze dich selber an eine "richtigere" Lösung. OpenSource Software lebt vom mitmachen.
11. Oktober 200619 j das war eine frustantwort ^^ Das Problem ist, das selbst wenn ich die Datenbank Ă€ndere / tabellen löschen und neu einspielen will, (phpmyadmin) ich nur Fehlermeldungen bekomme "Cannot add or update a child row: a foreign key constraint fails" je nachdem wo ich einen Datensatz anlege - Beispiel: Tabelle mit 2 FremdschlĂŒsseln und beim Create wird nur 1 FremdschlĂŒssel gefĂŒllt gleicher Fehler. @Jaraz, ich sage nicht das sie Fehlerhaft ist. Nur ist die Nutzbarkeit sehr eingeschrĂ€nkt. 1. Muss ich bei vielen Ănderungen erst die Verweise entfernen 2. bekomme ich keine eindeutige Fehlermeldung, nur "ein Verweis funzt nicht" Mein ziel ist eigentlich nur, das wenn ein ĂŒbergeordneter Datensatz gelöscht wird, der untergeordnete mit oder nicht-mit gelöscht wird. AbhĂ€ngig davon ob es einen ĂŒbergeordneten Datensatz gibt (FK_ID != null oder 0, mir wurscht) ^^ das seeehr viele Leute ein bestimmtes Betriebssystem benutzen, macht es auch nicht besser ^^
11. Oktober 200619 j ich schmeiĂe mal eine Frage hinterher kann Mysql / InnoDB mit dem Dateisystem vom betriebssystem arbeiten ? Der Fall ist das eines der Fehler ein Dateiname ist, die datei wird mit PHP abgespeichert und der name dann eingefĂŒgt. Ich wĂŒrde nun gerne aber die Datei mit in die transaktion aufnehmen, so das sie gelöscht wird, sollte die Transaktion fehlgeschlagen. Die Datei an sich brauche ich aber nicht in der Datenbank. hmm, ich prĂŒfe gerade die Tabellenstruktur. Das problem mit optionalen Relationen scheint wirklich auf fehlende "null" Einstellungen in der Struktur zu beruhen.
11. Oktober 200619 j kann Mysql / InnoDB mit dem Dateisystem vom betriebssystem arbeiten ?Das kommt darauf an, was du unter 'arbeiten' verstehst. Ich habe mich noch nicht ausfĂŒhrlich genug mit Triggern unter MySQL 5 beschĂ€ftigt, aber könnte mir vorstellen, dass es eine Lösung gibt, wo aus einem Trigger heraus irgendein Befehl ausgefĂŒhrt werden kann, mit dem die Datei physikalisch auf dem Dateisystem gelöscht wird. Aber selbst wenn es diese Möglichkeit tatsĂ€chlich gibt: Das schreit geradezu nach schlechtem Stil und Problemen. Das fĂ€ngt an bei Sicherheitsproblemen (was machst du, wenn aus irgendwelchen GrĂŒnden /bin/bash in die Datenbank kommt um beim Löschen des Datensatzes plötzlich Teile des Betriebssystems verschwunden sind?) und geht ĂŒber zu massiven Synchronisierungsprobleme zu allem möglichen sonst. Die Datenbank hat mit dem Filesystem erstmal nichts zu tun und alles, was eine Verbindung zwischen beiden schaffen muss/sollte als Zwischenschicht implementiert werden.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.