phpbar.de logo

Mailinglisten-Archive

Uhrzeit und Datum automatisch Eintragen

Uhrzeit und Datum automatisch Eintragen

Ralf Geschke ralf at kuerbis.org
Fre Mar 14 16:55:02 CET 2003


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