Forum: PC-Programmierung MySQL Trigger


von jk (Gast)


Lesenswert?

Hallo zusammen,

kurze und für euch sicherlich einfach zu beantwortende Frage:

Ist es möglich, mithilfe eines MySQL-Triggers ein externes Programm zu 
starten?

Beispiel: Es existiert in einer DB die Tabelle "steuerung". Der Trigger 
löst aus, sobald eine Änderung (UPDATE) der Zelle "wert" vorliegt.

Nun soll ein externes Programm starten.

Ist dies möglich?


Wenn nein, vielleicht der umgekehrte Fall:

Wie kann ich innerhalb von Linux einen "Event" / Interrupt auslösen, 
sobald innerhalb einer MySQL-Datenbank eine Änderung vorliegt, sodass 
ich eine Aktion (Programm) ausführe!?


Vielen Dank und Gruß

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Was spricht gegen regelmäßiges Pollen der Datenbank, ist das so 
Zeitkritisch? Meist passiert ein "UPDATE" auch nicht völlig zufällig, 
der Prozess welcher das Update ausführt könnte auch ein anderes Programm 
anstoßen.
Falls du unbedingt mit Triggern arbeiten willst: 
http://crazytechthoughts.blogspot.de/2011/12/call-external-program-from-mysql.html

von jk (Gast)


Lesenswert?

Ok, danke.

Ich weiß leider nicht, wie ich prozessorschonend ein Polling hinkriege. 
Letztendlich ist Polling ja immer eine Endlosschleife.


Oder irre ich?

DAnke!

von (prx) A. K. (prx)


Lesenswert?

jk schrieb:
> Ich weiß leider nicht, wie ich prozessorschonend ein Polling hinkriege.
> Letztendlich ist Polling ja immer eine Endlosschleife.

Wie schnell musst du denn darauf reagieren? Wenn du nur jede Sekunde 
abfragst, dann ist der Ressourcenverbrauch überschaubar.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

jk schrieb:
> Letztendlich ist Polling ja immer eine Endlosschleife.

Jedes Programm was sich nicht sofort beendet ist eine "Endlosschleife"

jk schrieb:
> Ich weiß leider nicht, wie ich prozessorschonend ein Polling hinkriege.
1
var old = ...
2
while(true) {
3
  var new = SELECT FROM ....
4
  if (old != new) {
5
    break;
6
  } else {
7
     sleep(1000 ms);
8
  }
9
}
Nach maximal einer Sekunde wirkt sich also eine Änderung aus, sind das 
Konfigurationsparamater kann man diese auch einfach anstelle in einer 
Varibalen zu speichern, einfach jedesmal neu laden wenn man sie 
benötigt.

von (prx) A. K. (prx)


Lesenswert?

Läubi .. schrieb:
> Jedes Programm was sich nicht sofort beendet ist eine "Endlosschleife"

Endlich hat jemand das Turingsche Halteproblem gelöst. ;-)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

A. K. schrieb:
> Läubi .. schrieb:
>> Jedes Programm was sich nicht sofort beendet ist eine "Endlosschleife"
>
> Endlich hat jemand das Turingsche Halteproblem gelöst. ;-)

Es kann halt so einfach sein ;-)

von Sven P. (Gast)


Lesenswert?

Naja, Trigger ist ja etwas mehr als nur ein Callback/Hook.
Da könnte ja auch die Datenkonsistenz noch mit hineinspielen.

von jk (Gast)


Lesenswert?

Hallo zusammen,

danke erstmal für die zahlreichen Antworten!

"Zeitkritisch" ist das Ganze eigentlich nicht...es würde reichen, wenn 
das (Perl?)-Skript innerhalb einer Sekunde entsprechend reagiert.


Dann werde ich das so machen. Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.