MySQL Datenbank automatisieren

IneedHelp

Benutzer
Beiträge
14
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 :)
 
Werbung:
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.

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.
 
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
 
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.


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

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)
 
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
 
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

Innerhalb eines TRIGGERs habe ich spezielle Variablen. NEW.* enthält alle Spalten des NEUEN Datensatzes, via new.id 'sehe' also die ID.
 
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 ! :)
 
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 ! :)

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.
 
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.
 
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.

Nirgends.

Code:
update personen set alter = 18 where id = 2;

Im WHERE ist nur 'id = 2'.
 
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?
 
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?

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.
 
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.
 
Werbung:
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.
 
Zurück
Oben