Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

MySQL Datenbank automatisieren

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von IneedHelp, 1 Mai 2014.

  1. IneedHelp

    IneedHelp Benutzer

    Hallo liebes Datenbankforum,
    ich bin noch neu in dem Gebiet &
    ich habe eine Frage, unzwar habe ich beispielsweise zwei Tabellen, eine in der eine ID ( PK) und information wie name, alter etc gespeichert sind.
    Nun soll wenn bsp. das alter auf 18 gestellt wird, automatisch in Tabelle 2 ein neuer eintrag gemacht werden in der die ID und in einer anderen Spalte ein Default wert automatisch zugewiesen wird. Damit das ständige manuele aktuellieseren Tabelle erleichtert wird.

    PS: Ich habe die Tabellen schon erstellt, und auch mit einem Fremdschlüssel eine Beziehung zwischen den beiden Tabellen aufgebaut, ich möchte die einträge in Tabelle 2 nur automatieseren.


    Ich hoffe ihr könnt mir helfen :)
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Noch mal um sicher zu gehen: Du hast eine Tabelle, wo Personen drin stehen, mit z.B. ihrem Namen und dem Alter. Das Alter hast da fix drin stehen, also 17 oder 74 oder so, und dann schaust jeden Tag nach, wer grad Geburtstag hat und machst dann Alter=Alter+1 ?

    Vollkommen FAIL. Speichere das Geburtsdatum, dann bekommst das Alter ganz einfach und immer korrekt raus.

    Außerdem FAIL: daß Du eine berechenbare Größe wie hier das Alter in einer zweiten Tabelle auch noch mal speichern willst. Das nennt sich Redundanz und ist die größte Sünde in einer Datenbank.
     
  3. IneedHelp

    IneedHelp Benutzer

    Es geht hier überhaupt nicht um Personen und alter, nur anhand dieses beispiels kann ich mein Problem erklären ohne direkt mein ganzes Projekt vorzustellen, was auch relativ uninteressant wäre.

    Ich möchte auch nicht das alter der Person in der zweiten tabelle erneut speichern, ich möchte beispielsweiße wenn der ich das alter einer Person auf 18 update soll in der zweiten Tablle bsp. ein eintrag mit der ID dieser Person und beispielsweise eine Spalte mit Guthaben(in Euro) 100.

    Und nochmal es geht ihr nicht um Personen, Geld oder sonst was, es ist nur eine einfachere Darstellung meines Problems
     
  4. akretschmer

    akretschmer Datenbank-Guru


    Dann nutze TRIGGER. Angeblich kann das MySQL mittlerweile.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Mal so als Fingerübung:

    Code:
    test=# create table personen (id int, alter int);
    CREATE TABLE
    test=*# create table personen_2 (id int, guthaben int);
    CREATE TABLE
    test=*# create or replace function update_personen_2() returns trigger as $$begin insert into personen_2 values (new.id, 100); return new; end;$$language plpgsql;
    CREATE FUNCTION
    test=*# create trigger trg1 after update on personen for each row execute procedure update_personen_2();
    CREATE TRIGGER
    test=*#
    test=*#
    test=*# insert into personen(id) values (1);
    INSERT 0 1
    test=*# insert into personen(id) values (2);
    INSERT 0 1
    test=*# insert into personen(id) values (3);
    INSERT 0 1
    test=*# select * from personen;
     id | alter
    ----+-------
      1 |
      2 |
      3 |
    (3 rows)
    
    test=*# select * from personen_2 ;
     id | guthaben
    ----+----------
    (0 rows)
    
    test=*# update personen set alter = 18 where id = 2;
    UPDATE 1
    test=*# select * from personen_2 ;
     id | guthaben
    ----+----------
      2 |  100
    (1 row)
    
     
  6. IneedHelp

    IneedHelp Benutzer

    Okay habe die Funktion und das Trigger verstanden, nur an welcher stelle weist du deiner erstellten funktion zu, das genau die ID übertragen soll, die bei tabelle 1 das alter 18 zugewiesen wurde
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Innerhalb eines TRIGGERs habe ich spezielle Variablen. NEW.* enthält alle Spalten des NEUEN Datensatzes, via new.id 'sehe' also die ID.
     
  8. IneedHelp

    IneedHelp Benutzer

    Hm, mist hab gedacht stehe kurz davor es zu verstehen. Kann das mit der Bedingung des Wert 18 leider noch nicht nachvollziehen,. Aber ich danke dir auf jedenfall sehr für deiner Hilfe !! sehr nett ! :)
     
  9. akretschmer

    akretschmer Datenbank-Guru

    Versteh Dein Problem nicht. Du wolltest: "ich möchte beispielsweiße wenn der ich das alter einer Person auf 18 update soll in der zweiten Tablle bsp. ein eintrag mit der ID dieser Person und beispielsweise eine Spalte mit Guthaben(in Euro) 100."

    Nichts anderes mache ich.
     
  10. IneedHelp

    IneedHelp Benutzer

    du hast die aufgabe ja auch genau so gelöst wie ich es gedacht hatte, ich versuche nur die befehle genau zu verstehen damit ich es auch kann. Und mein problem ist nur noch das ich nicht erkennen kannst wo du dem TIGGER oder der funktion sagst das die vorraussetzung 18 ist damit der neue datensatz angelegt wird.
     
  11. akretschmer

    akretschmer Datenbank-Guru

    Nirgends.

    Code:
    update personen set alter = 18 where id = 2;
    
    Im WHERE ist nur 'id = 2'.
     
  12. IneedHelp

    IneedHelp Benutzer

    Ja das weiß ich, nur der datensatz soll ja angelegt werden, wenn das alter 18 ist. An welcher Stelle gibst du die Anweisung zu prüfen das dass Alter 18 ist bevor der Datensatz automatisch angelegt wird?
     
  13. akretschmer

    akretschmer Datenbank-Guru

    Siehe meine erste Antwort. Speicher nicht das Alter, sondern das Geburtsdatum. Aus der Differenz zum aktuellen Datum kennst Du das Alter. Das kann man bequem beim Select ermitteln.
     
  14. IneedHelp

    IneedHelp Benutzer

    Oooh ...habe ja schon gesagt das es nicht um alter oder geld geht. Es könnte auch sein das wenn Player1 100 Pkt erreicht er in einer anderen Tabelle einen eintrag in Spalte ' Highscore erreicht' "Ja" und seiner ID.
     
  15. IneedHelp

    IneedHelp Benutzer

    ich meine das so wenn du das vllt besser verstehst

    Code:
    CREATE TRIGGER account
          AFTER UPDATE
          ON account
          FOR EACH ROW BEGIN
                IF `level` = "20" THEN
                      INSERT INTO switcher (ID, Switcher) VALUES (new.id, 3);
    Nur das funktioniert so leider nicht, hätte mich auch stark gewundert.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden