AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MySQL zwei Timestamp Felder?
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL zwei Timestamp Felder?

Ein Thema von Angel4585 · begonnen am 23. Jan 2007 · letzter Beitrag vom 23. Jan 2007
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

MySQL zwei Timestamp Felder?

  Alt 23. Jan 2007, 09:54
Datenbank: MySQL • Version: 5 • Zugriff über: ZEOS
Hallo,

ich hab eine Tabelle in die sollen folgende zwei Timestamp-Felder:

1. Erfassungsdatum Default: CURRENT_TIMESTAMP
2. Bearbeitungsdatum ON UPDATE CURRENT_TIMESTAMP Default: CURRENT_TIMESTAMP

Also Sinn dahinter, wenn ein Kunde angelegt wird soll ein erfassungsdatum rein das nicht aktualisiert wird, wenn er dann bearbeitet wird soll sich das zweite Feld aktualisieren.

Problem: MySQL scheint das nicht zu können obwohl ich in der Doku gelesen hab das es gehen sollte.

Kann mir das jemand weiterhelfen?

Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: MySQL zwei Timestamp Felder?

  Alt 23. Jan 2007, 10:14
Hallo Martin,

so wie ich die Dokumentation verstehe, musst du einfach dafür sorgen, dass der UpdateTimeStamp vor dem CreateTimeStamp liegt. MySQL aktualisiert dann den UpdateTimeStamp automatisch, den CreateTimeStamp initialisierst du per DDL default.

Grüße vom marabu
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#3

Re: MySQL zwei Timestamp Felder?

  Alt 23. Jan 2007, 10:36
Also ich hab das Erfassungsfeld im phpMyAdmin jetzt versucht einmal vor und einmal nach dem Update einzufügen, selbes Ergebnis:
Code:
#1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: MySQL zwei Timestamp Felder?

  Alt 23. Jan 2007, 13:00
Hallo,

diese Fehlermeldung ist ja relativ präzise: Hast du etwa einen Trigger ON UPDATE definiert? Brauchst du nicht für den UpdateTimeStamp.

Freundliche Grüße
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#5

Re: MySQL zwei Timestamp Felder?

  Alt 23. Jan 2007, 13:29
ja sag ich doch..

ein feld mit CURRENT_TIMESTAMP als defaultwert, damits nur reingeschrieben wird wenn der DS erstellt wird
ein feld mit CURRENT_TIMESTAMP als ON UPDATE damits bei jeder Änderung reingeschrieben wird.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: MySQL zwei Timestamp Felder?

  Alt 23. Jan 2007, 13:37
Vielleicht muss ich es etwas forscher rüberbringen: Hinfort mit dem ON UPDATE!!

SQL-Code:
create table demo (
  id integer auto_increment key,
  updated timestamp,
  created timestamp default current_timestamp
)
Kann es erst später testen, aber etwa so muss das aussehen. updated wird automatisch gepflegt, created wird nur beim erstenmal auf den default value gesetzt. Alternativ geht auch created datetime default now().

Jetzt alles klar?
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#7

Re: MySQL zwei Timestamp Felder?

  Alt 23. Jan 2007, 14:59
ok, weis jetzt was du meinst, funzt aber auch nicht.. ich muss einen Defaultwert angeben. Wenn der Defaultwert NULL ist schreibt er NULL rein, wenn er NOT NULL ist und ich nichts rein schreib kommt en Fehler von wegen ungültigem Defaultwert.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: MySQL zwei Timestamp Felder?

  Alt 23. Jan 2007, 17:51
Hallo Martin,

mein aktueller Erkenntnisstand ist: Es geht nicht ohne Code.

Aus dem MySQL 5.0 Reference Manual Chapter 11.3.1
It is not possible to have the current timestamp be the default value for one column and the auto-update value for another column.

...

Any single TIMESTAMP column in a table can be used as the one that is initialized to the current timestamp or updated automatically.

Tut mir leid, aber bei genauem Lesen komme ich zu dem Schluß, dass du beliebig viele TIMESTAMP Spalten anlegen kannst, aber meine Idee mit dem Weglassen des DEFAULT Wertes bei der Spalte Updated funktioniert nicht, da MySQL dann automatisch DEFAULT CURRENT_TIMESTAMP annimmt, was zu der von dir beobachteten Fehlermeldung führt. Mag sein, dass die Initialisierung von Spalte Created über eine UDF funktionieren würde, aber ich schlage dir eher diesen Weg vor:

SQL-Code:
create table angel (
  id integer auto_increment key,
  updated timestamp,
  created timestamp not null
)
Beim INSERT musst du CURRENT_TIMESTAMP für die Spalte Created übergeben, beim UPDATE wird die Spalte automatisch aktualisiert. Alternativ kannst du auch einen BEFORE INSERT Trigger definieren - wenn du mindestens Version 5.0.2 einsetzt.

Dein ON UPDATE hatte ich übrigens völlig falsch eingeordnet. Wer Lesen kann ist klar im Vorteil...

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz