SebastianJu: Mysql Zweit Tabellenspalten Timestamp?

Hallo,

in einer meiner Tabellen ist ein Feld vom Typ Timestamp mit Standardwert Current Timestamp. Im Timestamp wird also gespeichert zu welchem Zeitpunkt der Eintrag zuerst gesetzt wurde. Um genau zu sein ist es das Erstelldatum der Unterseiten einer Webseite.

Jetzt wollte ich noch einen weiteren Timestamp hinzufügen welcher genau gleich ist aber mit on change current timestamp.

Allerdings scheint das nicht zu klappen weil ich die Meldung erhalte dass man Timestamps nur einmal haben darf.

Dann habe ich probiert das Ganze mit Triggern zu lösen aber dazu brauche ich wohl mehr Rechte als ich auf meinem Shared-Hosting habe.

Wieso gibt es diese Einschränkung und wie kann ich das umgehen? Die automatische Speicherung dieser Werte ist praktisch weil ich halt diese Datensätze sowohl per php als auch im phpmyadmin ändere und wenn das einfach automatisch klappt wäre gut.

Gibt es da eine Lösung? Oder muss ich nach mehr Rechten fragen / alles manuell machen?

Danke!

  1. Hi,

    in einer meiner Tabellen ist ein Feld vom Typ Timestamp mit Standardwert Current Timestamp. Im Timestamp wird also gespeichert zu welchem Zeitpunkt der Eintrag zuerst gesetzt wurde. Um genau zu sein ist es das Erstelldatum der Unterseiten einer Webseite.

    Jetzt wollte ich noch einen weiteren Timestamp hinzufügen welcher genau gleich ist aber mit on change current timestamp.

    Allerdings scheint das nicht zu klappen weil ich die Meldung erhalte dass man Timestamps nur einmal haben darf.

    http://dev.mysql.com/doc/refman/5.1/en/timestamp.html:
    „For one TIMESTAMP column in a table, you can assign the current timestamp as the default value and the auto-update value. It is possible to have the current timestamp be the default value for initializing the column, for the auto-update value, or both. It is not possible to have the current timestamp be the default value for one column and the auto-update value for another column.”

    Wieso gibt es diese Einschränkung und wie kann ich das umgehen?

    Auf simplem Wege - wohl gar nicht.

    Die automatische Speicherung dieser Werte ist praktisch weil ich halt diese Datensätze sowohl per php als auch im phpmyadmin ändere und wenn das einfach automatisch klappt wäre gut.

    Machst du damit nur das ändern manuell, oder auch das anlegen?

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Wieso gibt es diese Einschränkung und wie kann ich das umgehen?

      Auf simplem Wege - wohl gar nicht.

      Hm. Seltsame Einschränkung.

      Die automatische Speicherung dieser Werte ist praktisch weil ich halt diese Datensätze sowohl per php als auch im phpmyadmin ändere und wenn das einfach automatisch klappt wäre gut.

      Machst du damit nur das ändern manuell, oder auch das anlegen?

      Das Anlegen passiert im Moment manuell, auch ändere ich öfter manuell. Aber ich schätze später wird das anlegen auch mal automatisiert werden.

      Also scheint es ich muss das manuell machen und halt immer drauf achten. Per Code geht es ja quasi automatisch mit now und formatierung aber manuell...

      Aber wenn es nicht anders geht...

  2. Im Timestamp wird also gespeichert zu welchem Zeitpunkt der Eintrag zuerst gesetzt wurde.

    Nein, ein Feld vom Typ timestamp wird von der Datenbank bei _jeder_ Änderung der betreffenden Zeile auf den aktuellen Zeitpunkt gesetzt.

    Jetzt wollte ich noch einen weiteren Timestamp hinzufügen welcher genau gleich ist aber mit on change current timestamp.
    Allerdings scheint das nicht zu klappen weil ich die Meldung erhalte dass man Timestamps nur einmal haben darf.

    Mehrere machen wegen besagter Automatik keinen Sinn.

    Wenn du einen selbst gewählten Zeitpunkt speichern möchtest, verwende den Spaltentyp datetime; beim Erstellen einer neuen Zeile kannst du das Feld mit der Funktion now() füttern.

    1. Im Timestamp wird also gespeichert zu welchem Zeitpunkt der Eintrag zuerst gesetzt wurde.

      Nein, ein Feld vom Typ timestamp wird von der Datenbank bei _jeder_ Änderung der betreffenden Zeile auf den aktuellen Zeitpunkt gesetzt.

      Das passiert nur wenn man "on change current timestamp" aktiviert hat. Wenn man nur current timestamp als standard gesetzt hat bleibt der erste timestamp erhalten bei änderungen.

      Jetzt wollte ich noch einen weiteren Timestamp hinzufügen welcher genau gleich ist aber mit on change current timestamp.
      Allerdings scheint das nicht zu klappen weil ich die Meldung erhalte dass man Timestamps nur einmal haben darf.

      Mehrere machen wegen besagter Automatik keinen Sinn.

      Wenn du einen selbst gewählten Zeitpunkt speichern möchtest, verwende den Spaltentyp datetime; beim Erstellen einer neuen Zeile kannst du das Feld mit der Funktion now() füttern.

      Das würde ich so machen bei Skriptaufrufen. Im Moment fülle ich diese Tabelle aber per Hand. Dann müsste ich die Spalte auch per Hand ausfüllen.

      Vielleicht sollte ich das Anlegedatum als Timestamp setzen und bei einer Änderung, die seltener vorkommt, dann halt per Hand die Zeit ändern...