Martin G.: timestamp nicht aktualisieren?

Hallo,

ich habe zwei Spalten TIMESTAMP in meiner mySQL-DB.
Wenn ich ein UPDATE eines Datensatzes mache, wird ein TIMESTAMP aktuallisiert, der andere nicht.
Beim UPDATE spreche ich keine der beiden Spalten an.
Wie kommt es zu diesem Vorgang?

Gruß

  1. Halihallo Martin

    ich habe zwei Spalten TIMESTAMP in meiner mySQL-DB.
    Wenn ich ein UPDATE eines Datensatzes mache, wird ein TIMESTAMP aktuallisiert, der andere nicht.
    Beim UPDATE spreche ich keine der beiden Spalten an.
    Wie kommt es zu diesem Vorgang?

    Es wird jeweils _nur_ die erste Timestamp auf die aktuelle Zeit gesetzt, jede weitere
    Timestamp-Column ist von dieser Funktionalität nicht beeinflusst.

    Auszug aus http://www.mysql.com/doc/en/DATETIME.html :
    "The TIMESTAMP column type provides a type that you can use to automatically mark INSERT or UPDATE operations with the current date and time. If you have multiple TIMESTAMP columns, only the first one is updated automatically. "

    Viele Grüsse

    Philipp

    1. DANKE für die schnelle Hilfe.
      Werde nur eine TIMESTAMP Spalte benutzen.

      GRuß

    2. Hi folks

      Hier noch ein etwas ausführlicherer Nachtrag (in Deutsch) aus dem MySQL-Handbuch:

      <cite>
      Wenn Sie mehrfache TIMESTAMP-Spalten haben, wird nur die erste automatisch
      aktualisiert. Die automatische Aktualisierung der TIMESTAMP-Spalte geschieht unter einer der folgenden
      Bedingungen:
       Die Spalte wird in einem INSERT- oder LOAD DATA INFILE-Statement nicht explizit angegeben.
       Die Spalte wird in einem UPDATE-Statement nicht explizit angegeben, aber ein anderer Spaltenwert
      ändert sich. (Beachten Sie, dass ein UPDATE, das eine Spalte auf einen Wert setzt, den
      diese bereits hat, nicht dazu führt, dass die TIMESTAMP-Spalte aktualisiert wird, weil MySQL
      das Aktualisieren in einem solchen Fall auf Effizienzgründen ignoriert.)
       Wenn Sie die TIMESTAMP-Spalte explizit auf NULL setzen.
      TIMESTAMP-Spalten abgesehen von der ersten können ebenfalls auf das aktuelle Datum und die
      aktuelle Zeit gesetzt werden. Setzen Sie die Spalte einfach auf NULL oder auf NOW(). Sie können
      jede TIMESTAMP-Spalte auf einen Wert setzen, der vom aktuellen Datum und der aktuellen Zeit
      abweicht, indem Sie sie explizit auf den gewünschten Wert setzen. Das gilt sogar für die erste
      TIMESTAMP-Spalte. Sie können diese Eigenschaft benutzen, wenn Sie einen TIMESTAMP auf das
      aktuelle Datum und die aktuelle Zeit setzen wollen, wenn Sie eine Zeile erzeugen, nicht aber, wenn
      die Zeile später aktualisiert wird:
       Lassen Sie MySQL die Spalte setzen, wenn die Zeile erzeugt wird. Das initialisiert sie auf das
      aktuelle Datum und die aktuelle Zeit.
       Wenn Sie nachfolgende Aktualisierungen anderer Spalten in der Zeile durchführen, setzen Sie
      die TIMESTAMP-Spalte explizit auf ihren aktuellen Wert.

      </cite>

      Bye
      Timothy

  2. Hallo,

    die Aussage war nicht sehr präzise.

    Es ist verboten, zwei Spalten vom Typ timestamp in der MySQL-DB anzulegen.
    Außerdem wird eine Timestamp-Spalte automatisch bei jedem Schreibzugriff mit dem aktuellen Wert gefüllt.

    MySQL bietet da zwar noch die Möglichkeit, gewisse Manipulationen an diesem Wert vorzunehmen, aber das sollte man lassen. Man kann einen eigenen Wert zuweisen. Außerdem kann man die Anzahl der akzeptierten Zeichen des zugewiesenen Wertes bestimmen. Es wird intern aber trotzdem auf die volle Breite ergänzt.

    Wie gesagt, nur eine Spalte mit dem Typ ist zulässig. Wenn Du z.B. den Zeitpunkt des Anlegens des Datensatzes speichern willst, dann musst Du eine Spalte vom Typ Datatime einbauen. Der kann man dann einen Wert zuweisen. Leider funktioniert bei meiner MySQL-Version noch kein Standardwert für neue Datensätze (now() wäre praktisch).

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
    1. Moin,

      Es ist verboten, zwei Spalten vom Typ timestamp in der MySQL-DB anzulegen.

      Quelle?

      Die von Philipp unten verlinkte MySQL-Dokumentation sagt jedenfalls
      "TIMESTAMP columns other than the first may also be set to the current date and time" und etwas später
      "This is true even for the first TIMESTAMP column"
      was meiner bescheidenen Meinung nach impliziert das mehr als eine Timestamp-Spalte erlaubt ist.

      --
      Henryk Plötz
      Grüße aus Berlin
  3. versammelt....

    Moin zusammen,

    ich habe etwas weiter unten im Forum einen Thread gestartet, auf den leider noch niemand geantwortet hat.

    Vieleleicht weiss einer von Euch die Antwort:

    Gibt es eine Timestamp funktion in MS Access 2000? Automatisches update sobald in db geschrieben wurde?

    Danke und Gruss
    Tobi

    1. Hallo Tobi,

      darauf habe ich Dir gerade geantwortet.

      Das geht im Prinzip nur über Formulare. Bei Access sollte man dem User sowieso untersagen, direkt auf die Tabellen zuzugreifen und immer Formulare als Schnittstelle benutzen. Dazu musst Du dann die Tabllenobjekte nur ausblenden und dem User das Recht zum Wiedereinblenden ausgeblendeter Objekte entziehen.

      Keinesfalls das Recht auf die Tabelle entziehen.

      Den Timestamp bekommst Du dann über ein Makro in die Tabelle, dass sich in der Event-Eigenschaft des Formulars für "vor aktualisieren" ansiedelt. Du brauchst kein VBA zu benutzen. Mit den Makros kann man da schon richtig komplizierte Dinge machen.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
      1. Hallo Tom,

        Das geht im Prinzip nur über Formulare. Bei Access sollte man dem User sowieso untersagen, direkt auf die Tabellen zuzugreifen und immer Formulare als Schnittstelle benutzen. Dazu musst Du dann die Tabllenobjekte nur ausblenden und dem User das Recht zum Wiedereinblenden ausgeblendeter Objekte entziehen.

        Keinesfalls das Recht auf die Tabelle entziehen.

        Ok, Prinzip habe ich kapiert mit den Rechten...aber da ich DB-Anfaenger (!) bin, ist mir das etwas zu kompliziert, ein Formular als Schnittstelle zu benutzen...(heisst das, das SQL Statement macht INSERT und UPDATE in ein Access Formular? Geht das? *unglaeubig schau* Was ist mit DELETE?)

        Den Timestamp bekommst Du dann über ein Makro in die Tabelle, dass sich in der Event-Eigenschaft des Formulars für "vor aktualisieren" ansiedelt. Du brauchst kein VBA zu benutzen. Mit den Makros kann man da schon richtig komplizierte Dinge machen.

        Ja, ist mir aufgefallen, das die Makros ziemlich maechtig sind....aber mit Timestamp in tabellen kommt man wohl an die Grenzen von MS Access?

        Danke & Gruss
        Tobi

        1. Hallo,

          bei Access geht die gesamte Kommunikation über Formulare, es sei denn, man will VBA einsetzen. Man kann auch Daten von einer Tabelle in die andere rüberschieben mit Hilfe von Formularen und Makros. Das Formular, dass man dabei nicht sehen will, schaltet man im Makro mit Echo = Nein einfach unsichtbar.

          Also: Alle Zugriffe, die nicht über Abfragen gemacht werden, werden über Formulare gemacht. KEINE Änderungen in den generischen Grids der Tabellen zulassen.

          Ich habe da drei Kurse a jeweils 3-4 Tage geschrieben. Access Beginners (allgemeine Verwendung fertiger Lösungen), Access Professionals (Aufbau eigener Lösungen mittels Formularen und Makros) und Access Programmkirung mit VBA (Voraussetzung hierfür: beide Accessseminare und allgemeine VB-Kenntnisse, also z.B. das VBA-Beginners Seminar).

          Um das alleine durchzuziehen brauchst Du ungefähr die dreifache Zeit. Also in ca. 50 Tagen à 8 Zeitstunden kannst Du echte Lösungen programmieren. Die Zeit solltest Du Dir gönnen.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.