Patti: Trigger Mysql Werte berechnen

Hallo Leute,
ich möchte gerne unter Mysql einen Trigger einrichten der bestimmte Werte die eingetragen werden dannach mit dem 10fachen Wert überschreibt. Geht die dies für jede Spalte?
Danke Euch

  1. ich möchte gerne unter Mysql einen Trigger einrichten der bestimmte Werte die eingetragen werden dannach mit dem 10fachen Wert überschreibt. Geht die dies für jede Spalte?

    http://dev.mysql.com/doc/refman/5.1/de/triggers.html

    Trigger gibts noch nicht so lange bei MySQL, also auch auf die Version achten, die Dir z.v. steht.

    Ansonsten: Trigger würde ich dafür nicht einsetzen.

    Was hältst Du von einem UPDATE?

      
    UPDATE  
     Tabelle  
    SET  
     Datenfeld1 = Datenfeld1 * 10,  
     Datenfeld2 = Datenfeld2 * 5  
    
    
    1. Danke für deine Hilfe,
      mein Problem ist das ich eine text Datei über die Linux Shell verarbeite und in die Datebank schreibe.
      Ich wollte per Trigger die neue Zeile *10 nehmen und wieder zurückschreiben...aber ich finde trotz Habuch keinen guten Einstieg...

      Patti

      1. CREATE TRIGGER
         Testtrigger
        AFTER INSERT ON
         Tabelle1
        FOR EACH ROW BEGIN
         UPDATE Tabelle1 SET Datenfeld = Datenfeld * 10 WHERE (<keine Ahnung>)
        END

        Irgendwie sowas, wie die WHERE-Klausel aussehen muss, weiss ich nicht, eventuell müsstest Du die temporär verfügbare Tabelle NEW referenzieren, aber das blicke ich auch nicht im Moment.

        Such doch mit Google einfach weitere Beispiele.

        1. Irgendwie krieg ich das nicht hin...sitz schon seit edlichen Stunden dran...hier mein Stand..

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

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

            Sieht doch gar nicht so schlecht aus, Fehlermeldung? Oder kein UPDATE nach ISNERT? (Das mit MAX(Id) täte ich mal überdenken. Da gibts sicherlich was Eleganteres.)

            1. Habe jetzt ne Teillösung:

              dieser Trigger funzt für eine Spalte:

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

              aber für mehere Spalten geht es nicht...

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

              Warum???

              1. FOR EACH ROW
                SET new.Lufttemperatur = new.Lufttemperatur / 100;
                SET new.Luftfeuchte = new.Luftfeuchte / 100;

                geht sowas:
                SET
                 new.Lufttemperatur = new.Lufttemperatur / 100,
                 new.Luftfeuchte = new.Luftfeuchte / 100;
                ?

                Das mit dem doppelten Semikolon sieht nicht gut aus, da es ein _Anweisungsende_ bedeuten könnte.

                1. @gonzo
                  Also ich bin jetzt fast am Ziel ohne die IF ABfrage funzt es schon prima, 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)

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

                    Irgendwie wirds mit IF() wohl auch gehen, aber Du darfst natürlich in Triggern (BEGIN ... END) auch mit Variablen und den Programmflusskontrollelementen (Schleifen, Bedingungen) kommen.

                    1. Aber meine Syntax ist doch richtig oder? (vom IF Konstrukt)

                  2. echo $begrüßung;

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

                    [...]

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

                    Das Ergebnis der IF-Funktion wird nirgends zugewiesen. Außerdem ist das Ergebnis des Wertes bei nicht erfüllter Bedingung das Ergebnis des Vergleichs new.Windchill = @Lufttemp.
                    Ich kann mir nicht vorstellen, dass du das so gewollt hast. Formuliere deinen Willen, wenn du möchtest, dass ihn dir jemand in gültige Syntax umsetzt oder dir dafür Hilfe geben soll.

                    echo "$verabschiedung $name";