Forum: PC Hard- und Software MySQL - Timestamp soll sich nicht automatisch verändern


von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich habe in einer MySQL-Tabelle zwei Felder vom Typ Timestamp. Definiert 
wurden sie ohne zusätzliche Parameter, automatisch hat MySQL daraus 
gemacht:

"TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"

Diese Tabelle dient der "Verwaltung" von QR-Codes als Wertmarken. 
Timestamp_1 enthält (zunächst) Datum/Zeit, als der Code erzeugt und 
ausgedruckt wurde, Timestamp_2 Datum/Zeit wenn der Code gescannt und 
entwertet wurde.

Blöderweise ändert sich das Erstellungsdatum automatisch mit, wenn das 
Entwertungsdatum per Update in den Datensatz eingetragen wird. Warum das 
so ist, ist mir schon klar, siehe "... ON UPDATE ...". Leider gibt es 
keine Option, um es auf "... ON CREATE ..." zu setzen, oder doch?

Falls nicht anders möglich, kann ich natürlich die DEFAULT-Option ganz 
rausnehmen und die beiden Timestamps quasi "zu Fuß" schreiben lassen, 
wollte aber hier vorher mal fragen, ob jemand evtl. noch eine andere 
Option kennt, bevor ich mein Programm nochmal ändere ... Danke für Tips.

: Bearbeitet durch User
von Thomas V. (tomv)


Lesenswert?

Hallo Frank,

gib einfach beim ersten Anlegen des Datensatzes NICHTS für das Feld 
"TIMESTAMP" an! Dann wird (gemäß obiger Definition des DEFAULT-Wertes) 
der aktuelle Zeitpunkt eingesetzt =;-)

Das "ON UPDATE" lässt Du einfach weg. Somit ändert MySQL auch später 
nichts mehr automatisch.

Letztlich definiert MySQL sowas meiner Kenntnis nach nicht von selbst 
so, wie Du es oben geschrieben hast. Ich nehme eher an, dass Du irgendwo 
ein "Kreuzchen" zu viel oder zu wenig gesetzt hattest =;-)

Gruß

Thomas

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Thomas V. schrieb:

> Letztlich definiert MySQL sowas meiner Kenntnis nach nicht von selbst
> so, wie Du es oben geschrieben hast. Ich nehme eher an, dass Du irgendwo
> ein "Kreuzchen" zu viel oder zu wenig gesetzt hattest =;-)
>

Danke für den Hinweis. Ich habe die Tabelle unter PHPMyAdmin angelegt, 
vielleicht hat der die zusätzliche Option ohne mein Zutun geschaltet. 
Leider ist die geannte Tabelle schon in intensiver Beutzung, so dass ich 
sie nicht einfach neu anlegen kann ... ich mach mir mal eine extra 
Test-Tab ...

von Thomas V. (tomv)


Lesenswert?

Frank E. schrieb:
> Leider ist die geannte Tabelle schon in intensiver Beutzung, so dass ich
> sie nicht einfach neu anlegen kann

Mit "ALTER TABLE ..." kann man die Tabellenstruktur auch während der 
Nutzung ändern =;-)
Solange die Felder vorher und hinterher dieselben Datentypen 
("TIMESTAMP") haben, ist auch kein Datenverlust zu befürchten.

Viel Erfolg beim Testen!

von Michael U. (amiga)


Lesenswert?

Hallo,

Frank E. schrieb:
> Ich habe die Tabelle unter PHPMyAdmin angelegt,
> vielleicht hat der die zusätzliche Option ohne mein Zutun geschaltet.

PHPMyAdmin zeigt beim Erstellen oder anlegen einer Spalte doch alls 
zugehörige an, auch das Attribut der Spalte. Wenn ich in einer 
bestehenden Tabelle auf Struktur gehe, bekomme ich die Werte auch 
angezeigt. Mit Bearbeiten auf der Spalte kann man sie dort auch ändern, 
eben Attribut auf "nichts".
Kopie einer Tabelle bekommt man unter "Operationen" mit Kopiere Tabelle 
auch in kurzer Zeit (je nach Tabellengröße).
Ändern des Attributs in Deinem Fall verändert die Inhalte nicht, ab 
sofort wird eben bei Update der timestamp nicht mehr geändert.

Gruß aus Berlin
Michael

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Michael U. schrieb:

> PHPMyAdmin zeigt beim Erstellen oder anlegen einer Spalte doch alls
> zugehörige an, auch das Attribut der Spalte. Wenn ich in einer ...

Ja, danke. Ich habe unter PHPMyAdmin per SQL angelegt: "create table 
...", da sieht man keine zus. Optionen.

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

Frank E. schrieb:
> Michael U. schrieb:
>
>> PHPMyAdmin zeigt beim Erstellen oder anlegen einer Spalte doch alls
>> zugehörige an, auch das Attribut der Spalte. Wenn ich in einer ...
>
> Ja, danke. Ich habe unter PHPMyAdmin per SQL angelegt: "create table
> ...", da sieht man keine zus. Optionen.

Per SQL mache ich das nur aus Scripten und damit recht selten. Beim 
Testen schaue ich da dann sowieso noch mit PHPMyAdmin rein. Ansonsten 
siegt die Bequemlichkeit und damit die Benutzung von PHPMyAdmin bei 
mir...
Meine Lieblingsecke ist bei varchar() eine falsche Kollation die mir 
dann beim testen auffällt.

Gruß aus Berlin
Michael

von Rene K. (xdraconix)


Lesenswert?

Hier selbiges Problem:

Mit PhpMyAdmin 5.0.4.deb2 unter MariaDB 10.5.19 tritt dieser Fehler auf. 
Bei Neu anlegen einer Tabelle mit Timestamp, sowie bei Änderung einer 
Tabelle mit einer neuen Timestamp Zeile. Egal was man mit der Zeiten 
macht oder in den Dropdowns macht: es kommt immer ein Timestamp mit "ON 
UPDATE CURRENT_TIMESTAMP" hinzu.

Einzigster Workaround, welchen ich machen konnte: direktes anlegen einer 
Spalte per SQL Code.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.