Mailinglisten-Archive |
On Fri, 14 Mar 2003, Stefan Brueckmann wrote: > Vielleicht könntest du mal eine Tabellenstrukturschnipsel und die > passen sql posten. Würde mir weiterhelfen. *seufz* Also schoen... Simpelstes Beispiel: create table blubb ( id int default '0' not null auto_increment, dt datetime default '0000-00-00 00:00:00', ts timestamp, primary key (id)); Query OK, 0 rows affected (0.28 sec) mysql> describe blubb; +-------+---------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+---------------+------+-----+---------------------+----------------+ | id | int(11) | | PRI | NULL | auto_increment | | dt | datetime | YES | | 0000-00-00 00:00:00 | | | ts | timestamp(14) | YES | | NULL | | +-------+---------------+------+-----+---------------------+----------------+ 3 rows in set (0.01 sec) Soweit klar, oder? Einmal timestamp, einmal datetime. Nun einfuegen: mysql> insert into blubb (id) values (0); Query OK, 1 row affected (0.00 sec) Ergebnis: mysql> select * from blubb; +----+---------------------+----------------+ | id | dt | ts | +----+---------------------+----------------+ | 1 | 0000-00-00 00:00:00 | 20030314164550 | +----+---------------------+----------------+ 1 row in set (0.00 sec) Logisch - datetime erhaelt den Default-Wert, Timestamp die aktuelle Zeit. Noch ein Datensatz: mysql> insert into blubb (id,dt) values (0,now()); Query OK, 1 row affected (0.01 sec) mysql> select * from blubb; +----+---------------------+----------------+ | id | dt | ts | +----+---------------------+----------------+ | 1 | 0000-00-00 00:00:00 | 20030314164550 | | 2 | 2003-03-14 16:47:05 | 20030314164705 | +----+---------------------+----------------+ 2 rows in set (0.49 sec) Diesmal mit der Funktion now() in das datetime-Feld. Ergebnis wie erwartet - die aktuellen Daten stehen drin. Im timestamp-Feld befinden sich wie im ersten Beispiel ebenfalls die aktuellen Angaben. Nun updaten: mysql> update blubb set dt=now() where id=1; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from blubb; +----+---------------------+----------------+ | id | dt | ts | +----+---------------------+----------------+ | 1 | 2003-03-14 16:48:52 | 20030314164852 | | 2 | 2003-03-14 16:47:05 | 20030314164705 | +----+---------------------+----------------+ 2 rows in set (0.00 sec) Ergebnis: dt von id 1 wird auf den aktuellen Wert (Funktion now() ) gesetzt, timestamp sowieso aktualisiert. Weitere Fragen? datetime wird natuerlich nicht immer aktualisiert: mysql> alter table blubb add wert varchar(10) default '' not null; Query OK, 2 rows affected (2.95 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from blubb; +----+---------------------+----------------+------+ | id | dt | ts | wert | +----+---------------------+----------------+------+ | 1 | 2003-03-14 16:48:52 | 20030314164852 | | | 2 | 2003-03-14 16:47:05 | 20030314164705 | | +----+---------------------+----------------+------+ 2 rows in set (0.00 sec) mysql> update blubb set wert='test1' where id=2; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from blubb; +----+---------------------+----------------+-------+ | id | dt | ts | wert | +----+---------------------+----------------+-------+ | 1 | 2003-03-14 16:48:52 | 20030314164852 | | | 2 | 2003-03-14 16:47:05 | 20030314165152 | test1 | +----+---------------------+----------------+-------+ 2 rows in set (0.00 sec) Das timestamp-Feld hingegen schon, sofern beim Update ein Feldinhalt veraendert wurde (vgl. ts-Felder der id 2): mysql> update blubb set wert='test1' where id=2; Query OK, 0 rows affected (0.01 sec) Rows matched: 1 Changed: 0 Warnings: 0 mysql> select * from blubb; +----+---------------------+----------------+-------+ | id | dt | ts | wert | +----+---------------------+----------------+-------+ | 1 | 2003-03-14 16:48:52 | 20030314164852 | | | 2 | 2003-03-14 16:47:05 | 20030314165152 | test1 | +----+---------------------+----------------+-------+ 2 rows in set (0.00 sec) Dahingegen: mysql> update blubb set wert='test1', dt=now() where id=2; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from blubb; +----+---------------------+----------------+-------+ | id | dt | ts | wert | +----+---------------------+----------------+-------+ | 1 | 2003-03-14 16:48:52 | 20030314164852 | | | 2 | 2003-03-14 16:53:41 | 20030314165341 | test1 | +----+---------------------+----------------+-------+ 2 rows in set (0.01 sec) Ergo: wert wurde nicht aktualisiert, wohl aber datetime mittels now(), ergo wurde auch das timestamp-Feld angepasst. Noch Fragen? Wuensche? Beste Gruesse, Ralf -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive