# MySQL Einträge löschen



## Happyman0815 (1. Nov 2009)

Hallo Leute!

Zunächst: Ich kenne mich noch nicht sonderlich mit MySQL aus.


Dank Tutorials bin ich nun so weit Tabellen zu erstellen, Einträge einzufügen, Einträge zu löschen und Abfragen zu erstellen :toll:


Nun bin ich gerad an einem Punkt, an dem ich nicht weiter komme:

Ich möchte drei Tabellen erstellen und diese in einer Datenbank verknüpfen. 
In der Datenbank sind mehrere "Projekte" enthalten. Diese Projekte bekommen eine ID.

Z.B.: 
*Tabelle "Projekte":*
Projekt ID >> Projektname
1     Projekt foo 1
2     Projekt foo 2
3     Projekt foo 3


In zwei anderen Tabellen kann man zu diesen Projekte Informationen ablegen. Um eine Information einem Projekt zuzuweisen, ist in dieser Tabelle auch eine Spalte "ID", in der die zugehörige Projekt ID abgelegt wird.

Soweit so gut. Nun habe ich ein Problem beim löschen:
Wenn ein Projekt in der Tabelle "Projekte" gelöscht wird, soll in den beiden anderen Tabellen auch alles zu diesem Projekt gelöscht werden, da sonst Datenmüll in der DB entsteht. Wie mache ich das? 

Beispiel:

In Tabelle "Projekte" wird Projekt foo 1 gelöscht:

*Tabelle "Projekte":*
Projekt ID >> Projektname
2     Projekt foo 2
3     Projekt foo 3


In zwei anderen Tabellen gab es nun mehrere Einträge zu diesem Projekt:

*Tabelle "Information":*
Projekt ID >> Information
2     "Das Projekt beginnt in wenigen Tagen"
3     "Meilenstein 5 erreicht"
1     "Meilenstein 9 erreicht."
1     "Das Projekt ist abgeschlossen und kann entfernt werden"

*Tabelle "Mitarbeiter":*
Projekt ID >> Mitarbeiter
2     "Max Mustermann, Hein Blöd, Johnny Walker"
3     "Dr. Jim Beam, Klaus Mayer"
1     "Peter Kruse, Stabilo Pen, Heinz Erhard"

Die insgesamt drei Einträge mit ID = 1 müssen nun auch verschwinden.

Gruß
Happy


----------



## SlaterB (2. Nov 2009)

delete from Information where Projekt = ..
usw
?

vor dem Löschen musst du schon wissen wo das Projekt überall drin ist und dann manuell diese Tabellen berichtigen,
oder suchst du ein Verfahren, das zu automatisieren?
höhere Frameworks wie Hibernate bieten sowas an, Datenbanken selber glaube ich nicht,
und trivial selbst zu implementieren ist es auch nicht gerade


----------



## Happyman0815 (2. Nov 2009)

Ah ja danke das hat geholfen. Nein ich brauche kein exotisches Framework!  Wie gesagt, es hapert noch am Grundwissen.


Eine weitere Frage habe ich da noch.

Ich habe zwei Spalten:

*Erstelldatum und Änderungsdatum.*

Wie schaff ich es bei MySQL die Spalten so einzustellen, dass bei Erstelldatum nur einmal das Datum gesetzt wird und bei einem Update nur das Änderungsdatum?

Es geht irgendwie mit dem Typ TIMESTAMP soweit bin ich schon.

Ich habe es aber noch nicht geschafft, dass Erstelldatum nur einmal zu beschreiben und Änderungsdatum sich mit jedem Update aktuallisieren zu lassen. Das gilt dann natürlich für jede Zeile also für jeden Datensatz.

Ich denke Ihr wisst was ich meine ;-)

Gruß
Happy


----------



## SlaterB (2. Nov 2009)

die Spalten haben damit weniger zu tun, die haben hauptsächlich ihren Typ,
ein Default-Wert kann nützlich sein um beim Erstellen automatisch das Datum zu setzen,

aber für Änderungen musst das Datum ganz normal übergeben, wie jeden anderen Wert auch,
hier gibt es vielleicht mehr Möglichkeiten zur Unterstützung, in einem Update-Kommando z.B. den Aufruf der Funktion SysDate()


----------



## Happyman0815 (2. Nov 2009)

So ein mist, dann kann ja jeder reinschreiben was er will.

Es sein denn die Funktion SysDate()  funktioniert.

Könntest du dazu einen SQL Befehle schreiben für Tabelle "foo" ?


Attribute: Inhalt | Erstelldatum | Änderungsdatum


Gruß
Happy


----------



## vladimir75 (2. Nov 2009)

Happyman0815 hat gesagt.:


> Es geht irgendwie mit dem Typ TIMESTAMP soweit bin ich schon.
> 
> 
> Gruß
> Happy





> TIMESTAMP
> Damit kann angezeigt werden, wann jede Zeile in der Tabelle zuletzt geändert wurde. Wenn eine Spalte mit DEFAULT TIMESTAMP deklariert wurde, wird bei Einfügungen ein Standardwert geliefert, und der Wert wird beim Aktualisieren der Zeile mit dem aktuellen Datum und der aktuellen Zeit aktualisiert.
> 
> Um einen Standardwert beim Einfügen bereitzustellen, die Spalte aber nicht bei jeder Zeilenaktualisierung zu aktualisieren, verwenden Sie DEFAULT CURRENT TIMESTAMP an Stelle von DEFAULT TIMESTAMP.



iAnywhere.com - CREATE TABLE-Anweisung

Vielleicht hilft das

Vladimir


----------

