Zum Inhalt springen

Trigger mit MySQL, PHP, JAVA?


matse

Empfohlene Beiträge

Hallo an Alle!

Ich habe in der Ausbildung die Aufgabe bekommen, eine Datenbank zu erstellen. Das habe ich gerade noch hingekriegt. Jetzt soll eine E-Mail verschickt werden, wenn ein bestimmter Eintrag in der DB geändert wird. Wie ich im Internet gelesen habe, sollte es mit Hilfe eines "Triggers" gehen. Nun wie schreibt man so einen Trigger? Ich habe nur sehr wenige Kentnisse in PHP und MySQL, und ganz wenig Erfahrung mit JAVA. Könnte mir jemand ein Lehrbuch empfehlen, welches mich schnell ans Ziel bringt?

Kann man diesen Trigger mit JAVA schreiben? Wie bindet man ihn dann in die Datenbank ein?

Wäre für eure Hilfe sehr dankbar!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Im Grunde wäre das der Einstieg MySQL :: MySQL 5.1 Referenzhandbuch :: 20.1 CREATE TRIGGER

Das Problem wird aber sein, dass Du laut Deiner Aufgabenstellung aus der Datenbank heraus eine EMail, sprich eine SMTP Verbindung zu einem Server aufbauen musst. mySQL bietet einfach nicht die passende Funktionalität um so etwas umzusetzen.

Als Möglichkeit so etwas zu bewerkstelligen, wäre der Wechsel auf ein anderes DBMS, z.B. Postgres, da kannst Du in der aktuellen Version mit Python und C++ einen solchen Trigger schreiben. Oder als zweite Möglichkeit Du veränderst in der Anwendung die Routine, die die Daten an die Datenbank sendet und erzeugst dort Deine Mail

Ein Lehrbuch dass Dir Dich zu diesem Ziel führt, gibt es nicht. Du musst eben die Grundkenntnisse der jeweiligen Sprache und des DBMS erarbeiten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine nicht ganz akkurate Lösungsalternative wäre beispielsweise ein relativ häufig ausgeführter Cronjob/Geplanter Task auf dem Server. Dieser ruft ein Skript auf (z.B. in PHP, Shell, Perl, ...), dass prüft ob es neue Einträge mit einem bestimmten Wert gibt und verschickt dann eine E-Mail.

Problem hier ist, dass die Mail dann nicht unbedingt zeitnah versendet wird. Sondern abhängig von der Häufigkeit des Cronjobs.

Eine weitere Alternative wäre, den Versand der E-Mail schon in dem Programm zu machen, welches den Wert in die DB einträgt - falls möglich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Im Grunde wäre das der Einstieg MySQL :: MySQL 5.1 Referenzhandbuch :: 20.1 CREATE TRIGGER

Das Problem wird aber sein, dass Du laut Deiner Aufgabenstellung aus der Datenbank heraus eine EMail, sprich eine SMTP Verbindung zu einem Server aufbauen musst. mySQL bietet einfach nicht die passende Funktionalität um so etwas umzusetzen.

Als Möglichkeit so etwas zu bewerkstelligen, wäre der Wechsel auf ein anderes DBMS, z.B. Postgres, da kannst Du in der aktuellen Version mit Python und C++ einen solchen Trigger schreiben. Oder als zweite Möglichkeit Du veränderst in der Anwendung die Routine, die die Daten an die Datenbank sendet und erzeugst dort Deine Mail

Das Problem ist, dass es nach einer manuellen Änderung der Datenbank eine E-Mail versendet werden soll. Und ich weiß nicht mal wo ich anfangen soll. Ist es nicht möglich so einen Trigger in Java zu schreiben? Und muss ich wirklich die DBS ändern? Wenn es nicht geht, kannst Du mir empfehlen welche Programmiersprache bzw. DBS ich lernen soll, damit ich die Aufgabe lösen kann? Wäre Postgres und C++ eine gute Alternative? Oder vielleicht MySQL mit Perl?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine nicht ganz akkurate Lösungsalternative wäre beispielsweise ein relativ häufig ausgeführter Cronjob/Geplanter Task auf dem Server. Dieser ruft ein Skript auf (z.B. in PHP, Shell, Perl, ...), dass prüft ob es neue Einträge mit einem bestimmten Wert gibt und verschickt dann eine E-Mail.

Problem hier ist, dass die Mail dann nicht unbedingt zeitnah versendet wird. Sondern abhängig von der Häufigkeit des Cronjobs.

Was ist ein Cronjob? Was meinst Du unter "nicht zeitnah"? Wenn die Zeitspanne zwischen der Änderung und dem Versenden der E-Mail 20-30 Minuten ist, so ist es in Ordnung. 2-3 Tage wären schon ein Problem. Ist die Verzögerung auch das einzige Nachteil eines Cronjobs?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist es nicht möglich so einen Trigger in Java zu schreiben? Und muss ich wirklich die DBS ändern?

Nicht in Java. mySQL unterstützt eben keine Trigger in Java.

Wenn es nicht geht, kannst Du mir empfehlen welche Programmiersprache bzw. DBS ich lernen soll, damit ich die Aufgabe lösen kann? Wäre Postgres und C++ eine gute Alternative? Oder vielleicht MySQL mit Perl?

Wenn es ein Trigger sein soll, musst Du eben die Sprache lernen, die vom jeweiligen DBMS unterstützt wird. Wie schon geschrieben, mySQL ist in diesem Punkt noch etwas eingeschränkt. Nimm ein MS SQL, Postgres, usw. dann hast Du mehr Möglichkeiten.

Aber Du solltest erst einmal mit den Grundlagen anfangen! Verstehe was ein Trigger ist und wie er arbeitet, denn das ist unabhängig von dem DBMS. Außerdem solltest Du hier nicht irgendwelche Sprache wie Perl in den Raum werfen, ohne dass Du weißt, was man damit anfangen kann.

Was ist ein Cronjob?

cron ? Wikipedia

auch hier gilt, fang' bitte einmal damit an, Dich mit der Thematik zu beschäftigten.

Du brauchst nicht zwingend einen Trigger, wenn Du es Dir reicht mit einer gewissen Zeitverzögerung zu arbeiten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nicht in Java. mySQL unterstützt eben keine Trigger in Java.

Wenn es ein Trigger sein soll, musst Du eben die Sprache lernen, die vom jeweiligen DBMS unterstützt wird. Wie schon geschrieben, mySQL ist in diesem Punkt noch etwas eingeschränkt. Nimm ein MS SQL, Postgres, usw. dann hast Du mehr Möglichkeiten.

D.h. mit MySQL kann ich auch keine Trigger mit PHP, C/C++ oder sonst irgendwas schreiben?

Aber Du solltest erst einmal mit den Grundlagen anfangen!

Ja, weiß ich. Leider weiß es mein Ausbilder nicht :(

cron ? Wikipedia

auch hier gilt, fang' bitte einmal damit an, Dich mit der Thematik zu beschäftigten.

Du brauchst nicht zwingend einen Trigger, wenn Du es Dir reicht mit einer gewissen Zeitverzögerung zu arbeiten.

Habe ich es richtig verstanden, dass das Crontab/Cronjob nur auf UNIX-basierten Betribssystemen funktioniert. Also nicht auf Windows.

Tut mir Leid fürs Nerven, aber es ist sehr wichtig für mich, damit ich zumindest weiß, wo ich anfangen soll, bzw. damit ich weiß, Grundlagen von was ich zuerst lernen soll...

Link zu diesem Kommentar
Auf anderen Seiten teilen

D.h. mit MySQL kann ich auch keine Trigger mit PHP, C/C++ oder sonst irgendwas schreiben?

Kurz und knapp: Genau.

Du musst die Sprache nehmen, die das DBMS anbietet.

Habe ich es richtig verstanden, dass das Crontab/Cronjob nur auf UNIX-basierten Betribssystemen funktioniert. Also nicht auf Windows.

Auch hier: Ja.

Windows Server sollten aber eine ähnliche Möglichkeit besitzen zeitgesteuert irgendwelche Programme zu starten.

Tut mir Leid fürs Nerven, aber es ist sehr wichtig für mich, damit ich zumindest weiß, wo ich anfangen soll, bzw. damit ich weiß, Grundlagen von was ich zuerst lernen soll...

Hier einmal das Manual von Postgres 9 PostgreSQL: Documentation: Manuals: PostgreSQL 9.0: Triggers bezüglich der Trigger. Ich persönlich setze primär auf Postgres, da ich eben viel mehr Möglichkeiten habe, wie mit mySQL, aber dennoch ein open-source Produkt habe.

Bevor Du Dich allerdings mit solchen Sachen wie Trigger beschäftigst, musst Du wirklich erst einmal das Basiswissen erwerben, d.h. grundlegende ERM/ERD Erstellung, Normalisierung, SQL, Transaktionssicherung, Integrität usw. Gerade die letzten beiden Punkte sind für Trigger essentiell.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

ERM/ERD Erstellung, Normalisierung, ..., Transaktionssicherung, Integrität

für die Aufgabe ist dieses Wissen überhaupt nicht erforderlich. Es schadet natürlich auch nicht, aber meiner Meinung nach kann man diese Aufgabe lösen, ohne zu wissen was ERM oder ERD bedeutet.

Man muss natürlich schon wissen, wie Trigger funktionieren, und ob die DB überhaupt in der Lage ist, entsprechende Anforderungen zu erfüllen. Ich denke dass egal ob MySQL oder Postgresql, du auf jeden Fall zu Mitteln des Betriebssystems zurückgreifen musst.

Das, was du vorhast, fällt unter den Begriff "Auditing". Vielleicht hilft dir das weiter:

MySQL :: MySQL 5.0 Reference Manual :: 4.6.7 mysqlbinlog ? Utility for Processing Binary Log Files

Oder das:

http://dev.mysql.com/doc/refman/5.1/en/query-log.html

Wie auch immer, hier wirst du dann eben ein Skript schreiben müssen, welches die entsprechenden Einträge aus dem Log filtert, und per Mail verschickt.

Habe ich es richtig verstanden, dass das Crontab/Cronjob nur auf UNIX-basierten Betribssystemen funktioniert. Also nicht auf Windows.

Bei mir (XP) gibt es "geplante Taks", die im Grunde die gleichen Aufgaben wie ein Cronjob erfüllen.

Bearbeitet von carstenj
Link zu diesem Kommentar
Auf anderen Seiten teilen

für die Aufgabe ist dieses Wissen überhaupt nicht erforderlich. Es schadet natürlich auch nicht, aber meiner Meinung nach kann man diese Aufgabe lösen, ohne zu wissen was ERM oder ERD bedeutet.

Das hat für michden Charakter, ich weiß wie ein Gaspedal funktioniert, also kann ich auch Auto fahren. Ich denke, dass man die Grundlagen zum Datenbankdesign sicher (!) beherrschen sollte, um so ein Projekt durchzuführen. Alles andere halte ich für fahrlässig. Z.B. im Hinblick darauf, dass bei fehlerhafter Triggerprogrammierung Rekusionen die Datenbank blockieren können, korrekte Transaktionsabsicherung ist gerade bei Triggern Pflicht und auch effiziente Datenstrukturen innerhalb des Triggers, denn gerade bei Trigger die on-row gefeuert werden, summieren sich die Laufzeiten unter Umständen

Ich denke dass egal ob MySQL oder Postgresql, du auf jeden Fall zu Mitteln des Betriebssystems zurückgreifen musst.

Bei Postgres mit Python als Triggersprache müsste das direkt sich über die smtplib bewerkstelligen lassen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielen Dank für eure Tipps! Ich sehe jetzt, dass ich noch eineiges lernen muss bevor ich mit der Arbeit anfangen kann. Es wird doch etwas länger dauern als geplant.

Eine Frage hätte ich noch. Da ich nun auch die ganze benötigte Software auf den Windows Server 2003 installieren muss, was würdet ihr empfehlen - Apache zu installieren, oder das vorhandene IIS zu nutzen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

sowas ist auch oft eine Frage der firmeninternen Vorgaben. Im Grunde sind beides Webserver, und ich würde mal einfach behaupten, dass beide grob das gleiche können. Der IIS fügt sich ins gesamte Windowsumfeld ein, Apache kommt eher aus der Unix Welt, von daher ist die Konfiguration da etwas gewöhnungsbedürftig für Windowsbenutzer.

Ich würde dir daher empfehlen, den sowieso schon vorhandenen IIS zu nutzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...