kostenloser Webspace werbefrei: lima-city


Trigger in MySQL erstellen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. fussballturnier

    fussballturnier hat kostenlosen Webspace.


    Der Update Befehl funktioniert anders. Zudem der Ned einmal vorkommt.

    Wke meinst du es das er nicht einmal vorkommt?

    MMn kommt es häufiger vor als man denkt und dann hätte man alle Daten gleich.


    Habe ja auch vor paar tagen schon gefragt ob du auch Updates und delete Statements mit triggern bearbeiten willst.

    Aber es ist wirklich besser die basics sich durchzulesen anstatt Häppchenweise mal hier mal da etwas zu verändern wovon man nicht weiß es evtl bewirken könnte.

    Beitrag zuletzt geändert: 24.10.2017 10:14:15 von fussballturnier
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. h***********r

    fussballturnier schrieb:

    Der Update Befehl funktioniert anders. Zudem der Ned einmal vorkommt.

    Wke meinst du es das er nicht einmal vorkommt?

    MMn kommt es häufiger vor als man denkt und dann hätte man alle Daten gleich.


    Habe ja auch vor paar tagen schon gefragt ob du auch Updates und delete Statements mit triggern bearbeiten willst.

    Aber es ist wirklich besser die basics sich durchzulesen anstatt Häppchenweise mal hier mal da etwas zu verändern wovon man nicht weiß es evtl bewirken könnte.


    Ich weiß auch nicht alles oder gar viel, allerdings benutzt er wieder Insert Info um Daten zu updaten. Und nicht Update.
    Zumindest sehe ich das so.
  4. Autor dieses Themas

    j****x

    Google ist schön und gut, allerdings verwirrt mich das eher mehr als das es bei mir Hilft. Meinen letzten geposteten Code habe ich versucht aus einem Google Code zu erstellen. Ich bin eben blöderweise davon ausgegangen, dass es sich selbst updatet. Problematisch ist es nun leider weil ich eine riesen Unordnung in die Datenbank bekomme wenn die Usernamen etc nachher nicht mehr stimmen und ich dann noch mehr Zeit aufwenden muss bis es wieder funst.

    Habe ja auch vor paar tagen schon gefragt ob du auch Updates und delete Statements mit triggern bearbeiten willst.


    Da haben wir wohl aneinander vorbei geredet, ich bin leider davon ausgegangen, dass dieser das auch selbst tut, aber Pustekuchen^^ - Also mein trigger code sah so aus

    --
    -- Trigger `accounts`
    --
    DROP TRIGGER IF EXISTS `copy_on_update_accounts`;
    DELIMITER //
    CREATE TRIGGER `copy_on_update_accounts` AFTER INSERT ON `accounts`
     FOR EACH ROW BEGIN
     INSERT into forumusers (username, email, password, group_id, language, realname, registered, last_visit)
     VALUES(new.username, new.email, new.password, 4, new.language, new.name, new.time, new.last_logged );
    END
    //
    DELIMITER ;


    Mit diesen Werten. Learning bei Doing ist für mich das beste, also nach und nach. Ihr habt mir hier diesen Code gepostet...


    UPDATE table_name
    SET column1=value, column2=value2,...
    WHERE some_column=some_value



    Wenn ich nun einen Denkfehler drin habe in meinem zusammengebastelten code dann korrigiert mich bitte. Ich habe nur die Werte genommen die auch geändert werden bei einem Update. Sachen wie Group_ID oder das Registrierungsdatum habe ich raus gelassen, da es sich ja nicht mehr ändert


    DELIMITER $$
    CREATE TRIGGER update_on_accounts UPDATE ON accounts
    FOR EACH ROW
    BEGIN
    UPDATE forumusers
    SET username = username, email=email, password=password, realname=name, last_visit=last_logged
    WHERE username = NEW.username, email=New.email, password=New.password, realname=New.name, last_visit=New.last_logged ;
    END;
    $$
    DELIMITER ;

    Beitrag zuletzt geändert: 24.10.2017 12:48:54 von jippyx
  5. h***********r

    Ganz so aufwendig musst du das nicht gestalten. Update tabellexyz Set variable='neuerwert', spalte2='neuerwert', Where eindeutigevariable=Benutzer

    Also bei Where benötigst du nur eine Information um die richtigen Datensatz zu finden. Da bietet sich ein alter Benutzername oder eine id an.

    Vom Rest (ich kenne mich nicht mit Triggern so wirklich aus) kann das ganze funktionieren.
  6. Autor dieses Themas

    j****x

    Ganz so aufwendig musst du das nicht gestalten. Update tabellexyz Set variable='neuerwert', spalte2='neuerwert', Where eindeutigevariable=Benutzer
    
    Also bei Where benötigst du nur eine Information um die richtigen Datensatz zu finden. Da bietet sich ein alter Benutzername oder eine id an.
    
    Vom Rest (ich kenne mich nicht mit Triggern so wirklich aus) kann das ganze funktionieren.



    Ich hab das ganze mal probiert und er haut mir einen Fehler um die Ohren

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE ON accounts
    FOR EACH ROW
    BEGIN
    UPDATE forumusers
    SET username=userna' at line 1

    Auffällig ist das er mir das username in userna gekürzt hat ?!
  7. fussballturnier

    fussballturnier hat kostenlosen Webspace.

    Also, alles in einem trigger kannst du nicht lösen.
    Du brauchst für jede DML-Anweisung jeweils einen Trigger (update Insert und delete)

    Ich hab deinen code nicht ausprobieren können oder groß durchgelesen, aber wenn du versuchst Daten upzudaten in einem insert trigger dann wird das nicht funktionieren.


    Wenn ich wieder zuhause bin am Donnerstag könnte ich dir die Beispiele für die Tabellen accounts und forumusers hier zeigen.
  8. Autor dieses Themas

    j****x

    Also, alles in einem trigger kannst du nicht lösen.
    Du brauchst für jede DML-Anweisung jeweils einen Trigger (update Insert und delete)


    Achso, okay das erklärt natürlich wieso das so nicht geht. Ich hab gestern den ganzen tag mit Beispielen, lesen und ausprobieren verbracht aber das bekomme ich ohne Hilfe noch nicht hin...

    Wenn ich wieder zuhause bin am Donnerstag könnte ich dir die Beispiele für die Tabellen accounts und forumusers hier zeigen.


    Das wäre echt bombe von Dir, solange hat das auch noch Zeit. Das Angebot würde ich dann gern annehmen :) Und vielen lieben Dank für Deine ganze Hilfe bislang, ich hätte echt nicht gedacht das es so umständlich und langwierig werden würde. Zumindest für so einen Frischling wie mich.
  9. fussballturnier

    fussballturnier hat kostenlosen Webspace.

    Ist ja nicht schwer. Werde dann am Donnerstag / Freitag mich kurz dran machen. Wenn das hier der letzte Post sein sollte editiere ich den einfach.
  10. Autor dieses Themas

    j****x

    Ist ja nicht schwer. Werde dann am Donnerstag / Freitag mich kurz dran machen. Wenn das hier der letzte Post sein sollte editiere ich den einfach.


    Hehe für mich schon etwas^^. Ja klar, danke so machen wir das.
    lg.
  11. fussballturnier

    fussballturnier hat kostenlosen Webspace.

    Ist etwas spät geworden, aber ich hab vergessen zu fragen was denn der Primarykey ist der beiden Tabellen um einen Datensatz eindeutig zu identifizieren, die emailadresse wird es ja nicht sein.



    --
    -- Tabellenstruktur für Tabelle `accounts`
    --

    CREATE TABLE IF NOT EXISTS `accounts` (
      `A_ID` int(11) NOT NULL,
      `Username` varchar(100) COLLATE utf8_bin NOT NULL,
      `Email` varchar(100) COLLATE utf8_bin NOT NULL,
      `Passwort` varchar(100) COLLATE utf8_bin NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


    --
    -- DELETE Trigger `accounts`
    --

    DELIMITER //
    CREATE TRIGGER `delete_trigger_accounts` AFTER DELETE ON `accounts`
     FOR EACH ROW BEGIN
    	DELETE FROM forumusers where old.username = username;
    END
    //
    DELIMITER ;


    --
    -- INSERT Trigger `accounts`
    --

    DELIMITER //
    CREATE TRIGGER `insert_trigger_accounts` AFTER INSERT ON `accounts`
     FOR EACH ROW BEGIN
    	INSERT into forumusers (username, email, passwort)
    	VALUES(new.username, new.email, new.passwort);
    END
    //
    DELIMITER ;


    --
    -- UPDATE Trigger `accounts`
    --

    DELIMITER //
    CREATE TRIGGER `update_trigger_accounts` AFTER UPDATE ON `accounts`
     FOR EACH ROW BEGIN
    	UPDATE forumusers set username = new.username, email = new.email, passwort = new.passwort;
    END
    //
    DELIMITER ;



    --
    -- Tabellenstruktur für Tabelle `forumusers`
    --

    CREATE TABLE IF NOT EXISTS `forumusers` (
      `F_ID` int(11) NOT NULL,
      `Username` varchar(100) COLLATE utf8_bin NOT NULL,
      `Email` varchar(100) COLLATE utf8_bin NOT NULL,
      `Passwort` varchar(100) COLLATE utf8_bin NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


    Du müsstest dann noch die Bedingung anpassen an deinen Primarykey sonst haut es dir alles übern Haufen und erzeugt die Datenmüll.

    Beitrag zuletzt geändert: 28.10.2017 12:55:27 von fussballturnier
  12. Autor dieses Themas

    j****x

    Du müsstest dann noch die Bedingung anpassen an deinen Primarykey sonst haut es dir alles übern Haufen und erzeugt die Datenmüll.


    Erst mal vielen lieben Dank. Ich war selbst auch noch unterwegs deshalb ist das ja nicht so schlimm. Ich bin Dir ja sehr dankbar, das Du überhaupt die Zeit geopfert hast.

    Bevor ich mich nun daran mache und zerschieße meine Datenbak, noch eine Frage. Mein Freund das Internet hat mir bereichtet das ein Eindeutiger Primärschlüssel folgendes sei...

    Hierbei handelt es sich um einen eindeutigen Schlüssel der in einer Spalte der Tabelle gespeichert wird.

    Nun ist dieser schon von Haus aus festgelegt oder kann das zb auch der username sein? die ID würde weg fallen da die sowohl in accounts als auch in forumusers bei jedem User unterschiedlich ist.

    Und wenn ja, an welcher stelle muss der eingetragen werden, bei A_ID?

    Viele liebe Grüße
    Ronny
  13. fussballturnier

    fussballturnier hat kostenlosen Webspace.

    Das die ids anders sind ist dem geschuldet das es zwei unterschiedliche Tabellen sind.

    Du könntest entweder eine selbst erdachte id nehmen die autoinkrement ist und sich bei jedem insert hochzählt. Diese id wäre dann in beiden Tabellen dafür gedacht das man sie durchsuchen kann und wären über die id "verbunden".
    Sprich, du hast die id 1337 in accounts und die dazugehörigen infos in forumusers kannst du auch per select mit der where Bedingung id = 1337 suchen lassen und würdest die passende dazen erhalten.

    Oder aber du baust in die where Bedingungen pseudoprimärschlüssel ein (username + email + irgendwas anderes) und wenn du damit ein select absetzt erhälst du ebenfalls das selbe ergebnis wie mit dem oberen Beispiel.
    Evtl. Reicht es ja schon username und Email dafür zu nehmen damit es eindeutig ist. Sollte ja schon so sein das sich jede email Adresse nur 1x anmelden kann mit einem usernamen.

    Die zweite Variante habe ich verwendet da ich nicht weiß wie der rest deiner Tabellen und Datenbank aussieht.

    Ich würde dir empfehlen evlt eine Kopie der Datenbanken zu erstellen und die trigger dort auszuprobieren bevor du es im laufenden Betrieb machst. Erst wenn alles funktioniert dann würde ich es live nehmen.
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!