TIMESTAMP-Spalte automatisch aktualisieren
Christian
- datenbank
0 André Laugks0 Christian0 dedlfix0 André Laugks
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:
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()."
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?
Hallo!
[...]
Welche MySQL-Version hast Du? Wie sieht die Tabelle aus, also das CREATE-Statement.
André Laugks
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
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";
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
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