Trigger in Mysql

OP #610215
HalLo Leute,
ich möchte in Mysql einen Trigger einrichten, der bei einem neuen 
Eintrag in die DB, jeden Wert dieser Zeile durch 10 teilt und dann die 
Spalten wieder mit den Wert/10 füllt.

Ich habe hier mal einen Ansatz:

TRIGGER
 Testtrigger
AFTER INSERT ON
 wetterdaten
FOR EACH ROW BEGIN
 UPDATE wetterdaten SET `Lufttemperatur` = `Lufttemperatur`/10 WHERE (ID 
= MAX(ID));
END

Wo liegt denn mein Denkfehler?

Peter
So wie ich dich verstehe soll nur der neue Eintrag geändert werden, dann 
halte ich das hier für besser:

CREATE TRIGGER Testtrigger
BEFORE INSERT ON wetterdaten
FOR EACH ROW
SET new.Lufttemperatur = new.Lufttemperatur / 10
OP
Hallo freddy436,
ja das habe ich gesucht. Danke Dir.
Eine Frage habe ich aber noch, woher weiß man sowas? Ich habe gestern 
nur sehr wenig dazu gefunden und habe bestimmt 5h gegoogelt!
Kannst Du mir vielleicht ne gute Seite dazu nennen oder ne 
Buchempfehlung?

Wünsche ein schönes Wochenende.

Peter
In meinen Augen reicht die offizielle MySQL Referenz/Dokumentation 
völlig aus, mehr habe ich eigentlich nie gebraucht.

Ich habe nie ein Buch oder ähnliches über SQL gelesen. Ich fange auch 
erst jetzt mit einem Informatik Studium an. Meine SQL Kenntnisse sind 
eigentlich alle ein Nebenprodukt des PHP Lernens und einigen Projekten.
Ich bin sicherlich kein Profi, würde mich als Fortgeschritten 
eingestufft.
Gerade bei so nicht alltäglichen Sachen gucke ich aber auch immer wieder 
gerne in die Referenz.
OP
Habe jetzt mal versucht mehrere Spalten zu ändern...aber meine MYSQL 
Version 5.0.41 unterstützt keine multiple Triggers. In PHP würde ich 
einfach die verschiedenen Spaltenwerte asulesen, verändern und 
zurückschreiben mit einem Update Befehl. Aber mit MYSQL tue ich mich 
schwer. Wie kann man das umgehen?

CREATE TRIGGER Testtrigger
BEFORE INSERT ON wetterdaten
FOR EACH ROW
SET new.Lufttemperatur = new.Lufttemperatur / 100;
SET new.Luftfeuchte = new.Luftfeuchte / 100;

Peter
CREATE TRIGGER Testtrigger
BEFORE INSERT ON wetterdaten
FOR EACH ROW
SET new.Lufttemperatur = new.Lufttemperatur / 100, new.Luftfeuchte = 
new.Luftfeuchte / 100

Wenn du mehrere Statements verwenden willst musst du mit BEGIN/END 
arbeiten.
OP
@freddy436
Also ich bin jetzt fast am Ziel, leider macht die IF Abfrage Probleme, 
vielleicht hast Du ja noch eine Idee & Danke für deine Bemühungen :-)

CREATE TRIGGER Testtrigger
BEFORE INSERT ON wetterdaten
FOR EACH ROW
SET new.Lufttemperatur = new.Lufttemperatur / 100,
@Lufttemp = new.Lufttemperatur,
new.Luftfeuchte = new.Luftfeuchte / 100,
new.Luftdruck = new.Luftdruck / 100,
new.Windgeschwindigkeit = new.Windgeschwindigkeit / 100,
@Windgeschw = new.Windgeschwindigkeit,
new.Helligkeit = new.Helligkeit / 100,
new.Windchill = ROUND(13.12 + 0.6215 * @Lufttemp - 11.37 * 
POW(@Windgeschw,0.16) + 0.3965 * @Lufttemp * POW(@Windgeschw,0.16),2),
IF (@Windgeschw > 5,new.Windchill,new.Windchill = @Lufttemp)
ich vermute mal du suchst das hier:

...,
new.Windchill = IF (@Windgeschw > 5,new.Windchill,@Lufttemp)

Wenn du mal gezwungen wurdest mit Excel zu arbeiten, das SQL IF kann man 
mit dem Excel IF/WENN vergleichen ;)

Das da sieht für mich danach aus als wenn du von irgendjemand gezwungen 
wirst das mit TRIGGERN zu machen, liege ich da richtig?

Ansonsten würde es vermutlich deutlich mehr Sinn machen das direkt im 
Client Programm zu machen ;)
OP
Danke nochmal,
funzt alles jetzt prima.
Mit der wenn /dann Funktion in Excel hatte ich auch schon mal Probleme 
;-).

Ja, mich zwingt der Apache dazu...ich lese lese über ein shell Script 
Daten in die DB. Da ich mit Linux sehr wenig zu tun hab, mach ichs 
lieber mit dem Trigger.

Gruß Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.