MySQL - Timestamp soll sich nicht automatisch verändern

OP (Firma: Q3) #7385783
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.

#7385804
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

OP (Firma: Q3) #7385820
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 ...

#7385825
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!

#7386029
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

#7386040
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

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren