Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MySQL zwei Timestamp Felder? (https://www.delphipraxis.net/84882-mysql-zwei-timestamp-felder.html)

Angel4585 23. Jan 2007 09:54

Datenbank: MySQL • Version: 5 • Zugriff über: ZEOS

MySQL zwei Timestamp Felder?
 
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?

:angel:

marabu 23. Jan 2007 10:14

Re: MySQL zwei Timestamp Felder?
 
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

Angel4585 23. Jan 2007 10:36

Re: MySQL zwei Timestamp Felder?
 
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

marabu 23. Jan 2007 13:00

Re: MySQL zwei Timestamp Felder?
 
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

Angel4585 23. Jan 2007 13:29

Re: MySQL zwei Timestamp Felder?
 
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.

marabu 23. Jan 2007 13:37

Re: MySQL zwei Timestamp Felder?
 
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?

Angel4585 23. Jan 2007 14:59

Re: MySQL zwei Timestamp Felder?
 
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.

marabu 23. Jan 2007 17:51

Re: MySQL zwei Timestamp Felder?
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:18 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