Wäre es statt einem Trigger, der Fehleinträge im Nachhinein löscht, nicht logischer den Eintrag an sich vor dem INSERT mit entsprechenden IF-Anweisungen zu prüfen?
Hallo alle zusammen,
ich suche seit knapp zwei Tagen eine Lösung zu einem MySQL Problem. Ich verwende als DB MySQL 5.0 mit InnoDB Tabellen. Verwende InnoDB um Transaktionssicherheit sowie referentielle Integrietät zu erhalten. Die möchte ich mir mit einem Trigger weiter sicher, jedoch will MySQL nicht so wie ich.
Mein Problem, ich habe mehrere Tabellen die miteinander verknüpft sind.
Verbindungen: A ------------ B ------------ C -------------- A
Beziehungen: n:m 1:1 n:m
Wenn ich einen Datensatz in die Tabelle zwischen A und B einfüge (wegen n:m Beziehung), möchte ich sicherstellen, das der Datensatz auch wirklich über die Tabelle C zu dem richtigen A gehört. Ich hab mir hierfür auch schon einen Trigger zusammengebaut. Jedoch funktioniert der Trigger nicht so wie ich will. Sobald ein Datensatz in die Tabelle zwischen A und B eingefügt wird soll der Trigger gestartet werden und über C, A überprüfen. Ist keine integrietät gegeben, soll der Trigger ein Rollback vornehmen wie es beim MS SQL Server funktioniert.
Laut dem MySQL Referenzhandbuch ist jedoch ein Rollback innerhalb eines Triggers nicht erlaubt. Weiß zufällig einer wie ein Trigger abgebrochen werden kann und somit das einfügen rückgängig gemacht wird?
Schon mal vielen Dank im vorraus!
Wäre es statt einem Trigger, der Fehleinträge im Nachhinein löscht, nicht logischer den Eintrag an sich vor dem INSERT mit entsprechenden IF-Anweisungen zu prüfen?
Ja das war meine Absicht, das Einfügen zu verhindern, sobald der Trigger eine falsche referenzielle Integrität feststellt.
InnoDB hat doch von Hause aus eine referenzielle Integrität ...
Ja, InnoDB hat eine referenzielle Integrität, aber nicht über mehrere Tabellen hinweg, siehe mein Problem:
Verbindungen: A ------------ B ------------ C -------------- A
Beziehungen: A - B n:m; B - C 1:1; C - A n:m
Es werden Daten in der Tabelle zwischen A und B eingefügt. Dann soll aber sichergestellt werden das die gerade eingefügten Daten richtig zugeordnet sind. Dies kann nur über zwei INNER JOINs über Tabelle B mit C mit A festgestellt werden.
Stimmt, mein Fehler ...
Ich hab das Datenbankschema als Bild eingefügt. Das erklären ist immer recht umständlich, ein Bild sagt mehr als tausend Worte
Gerade festgestellt das ich mich mit den Namen im Bild vertan habe im Vergleich zu meiner Erklärung weiter unten. Sorry!
Geändert von SnUgEr (22.04.2008 um 17:04 Uhr)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)