Christian: TIMESTAMP-Spalte automatisch aktualisieren

Gute Nacht allerseits,

ich habe eine MySQL-Datenbank und darin eine Tabelle mit der Spalte "eintragsdatum" des Typs "TIMESTAMP"

Aus dem MySQL-Referenzhandbuch 7.2.2.2:

"Der TIMESTAMP-Typ ist ein Typ, den Sie dafür benutzen können, um INSERT- oder UPDATE-Operationen mit dem aktuellen Datum und der aktuellen Zeit zu stempeln. Wenn Sie mehrfache TIMESTAMP-Spalten haben, wird nur die erste automatisch aktualisiert.

Die automatische Aktualisierung der TIMESTAMP-Spalte geschieht unter einer der folgenden Bedingungen:

  1. Die Spalte wird in einem INSERT- oder LOAD DATA INFILE-Statement nicht explizit angegeben.

  2. 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.)

  3. 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()."

Weder bei Bedingung 1) noch bei 2) wird auf meinem localhost die TIMESTAMP-Spalte automatisch aktualisiert.
Aktualisiert wird sie nur, wenn ich sie explizit auf NULL oder NOW() setze.

Wie kommt das?

  1. Hallo!

    [...]

    Welche MySQL-Version hast Du? Wie sieht die Tabelle aus, also das CREATE-Statement.

    André Laugks

    --
    Die Frau geht, die Hilti bleibt!
    1. HI,

      Welche MySQL-Version hast Du? Wie sieht die Tabelle aus, also das CREATE-Statement.

      MySQL 1.4.8

      Und unter php-info steht bei mysql:
      Client API version 4.1.7 (wat isn des?)

      CREATE TABLE trallala (
        id int(5) unsigned NOT NULL auto_increment,
        datum\_ts int(14) default NULL,
        spalte3 smallint(2) default NULL,
        spalte4 varchar(15) collate latin1_general_ci default NULL,
        spalte5 char(3) collate latin1_general_ci default NULL,
        spalte6 varchar(4) collate latin1_general_ci default NULL,
        spalte7 varchar(4) collate latin1_general_ci default '0',
        spalte8 tinyint(1) default '0',
        spalte9 char(3) collate latin1_general_ci default NULL,
        spalt10 varchar(20) collate latin1_general_ci default NULL,
        spalt11 varchar(6) collate latin1_general_ci default NULL,
        spalt12 varchar(6) collate latin1_general_ci default NULL,
        spalt13 tinyint(1) default '0',
        spalt14 tinyint(1) default '0',
        eintragszeit timestamp NOT NULL default '0000-00-00 00:00:00',
        PRIMARY KEY  (id)
      ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1087 ;

      Grüße
      Christian

      1. echo $begrüßung;

        HI,

        Welche MySQL-Version hast Du? Wie sieht die Tabelle aus, also das CREATE-Statement.

        MySQL 1.4.8

        Das ist sicher ein Zahlendreher und heißt bestimmt 4.1.8, oder?

        Und unter php-info steht bei mysql:
        Client API version 4.1.7 (wat isn des?)

        Die Client API (Application Programming Interface) von MySQL ist eine Funktionsbibliothek, die in Programme eingebunden werden kann, die MySQL-Zugriff benötigen. PHP kann, ohne sich zu einem Server zu verbinden, nur die Versionsnummer dieser eingebundenen Client-API anzeigen. Die Versionsnummer der Client-API muss auch nicht mit der des Servers übereinstimmen, denn mann muss sich ja auch zu mehreren Servern unterschiedlicher Versionsstände verbinden können.

        CREATE TABLE trallala (

        [...]

        eintragszeit timestamp NOT NULL default '0000-00-00 00:00:00',

        Die deutsche Handbuchseite ist nicht sehr aktuell. Das Verhalten von TIMESTAMP-Feldern hat sich mit Version 4.1 geändert. und es gibt nun zwei extra Seiten für TIMESTAMP vor und ab Version 4.1

        Bei dir fehlt der ON UPDATE-Teil in der Definition von "eintragszeit".

        echo "$verabschiedung $name";

        1. hi,

          ah, danke!

          MySQL 1.4.8

          Das ist sicher ein Zahlendreher und heißt bestimmt 4.1.8, oder?

          dit hebbick eiskalt aussa xampp-apache-benutzeroberfläche kopiert!

          grüße
          Christian

      2. Hallo!

        eintragszeit timestamp NOT NULL default '0000-00-00 00:00:00',

        eintragszeit timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,

        In anderen Datenbanken gibt es einen Spaltentype wie "timestamp" (MySQL < 4.1) nicht. Dort erstellt man sich so oder ähnlich Timestamp-Spalten wie die unter MySQL bekannt sind.

        Den Rest hat ja dedlfix schon geschrieben.

        André Laugks

        --
        Die Frau geht, die Hilti bleibt!