WAŻNA EDYCJA: Teraz można to osiągnąć za pomocą pól DATETIME od wersji MySQL 5.6.5 , spójrz na inny post poniżej...
Poprzednie wersje nie mogą tego zrobić z DATETIME...
Ale możesz to zrobić za pomocą 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>
OSTRZEŻENIE: JEŚLI zdefiniujesz kolumnę z domyślną wartością CURRENT_TIMESTAMP ON, będziesz musiał ZAWSZE określić wartość dla tej kolumny, w przeciwnym razie wartość automatycznie zresetuje się do „now()” podczas aktualizacji. Oznacza to, że jeśli nie chcesz, aby wartość się zmieniała, instrukcja UPDATE musi zawierać „[nazwa Twojej kolumny] =[nazwa Twojej kolumny]” (lub inną wartość), w przeciwnym razie wartość stanie się „now()”. Dziwne, ale prawdziwe. Używam 5.5.56-MariaDB