MODIFICA IMPORTANTE: È ora possibile ottenere questo risultato con i campi DATETIME da MySQL 5.6.5 , dai un'occhiata all'altro post sotto...
Le versioni precedenti non possono farlo con DATETIME...
Ma puoi farlo con TIMESTAMP:
mysql> create table test (str varchar(32), ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.00 sec)
mysql> desc test;
+-------+-------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+-------------------+-------+
| str | varchar(32) | YES | | NULL | |
| ts | timestamp | NO | | CURRENT_TIMESTAMP | |
+-------+-------------+------+-----+-------------------+-------+
2 rows in set (0.00 sec)
mysql> insert into test (str) values ("demo");
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+------+---------------------+
| str | ts |
+------+---------------------+
| demo | 2008-10-03 22:59:52 |
+------+---------------------+
1 row in set (0.00 sec)
mysql>
AVVISO: SE si definisce una colonna con CURRENT_TIMESTAMP ON come impostazione predefinita, sarà necessario specificare SEMPRE un valore per questa colonna o il valore verrà automaticamente reimpostato su "now()" durante l'aggiornamento. Ciò significa che se non si desidera modificare il valore, l'istruzione UPDATE deve contenere "[nome della colonna] =[nome della colonna]" (o un altro valore) o il valore diventerà "ora()". Strano, ma vero. Sto usando 5.5.56-MariaDB