重要な編集: MySQL 5.6.5 以降、DATETIMEフィールドでこれを実現できるようになりました。 、その他の投稿 をご覧ください 以下...
以前のバージョンでは、DATETIMEではそれを実行できません...
ただし、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>
警告: デフォルトでCURRENT_TIMESTAMPONを使用して列を定義する場合は、常にこの列の値を指定する必要があります。そうしないと、更新時に値が自動的に「now()」にリセットされます。つまり、値を変更したくない場合は、UPDATEステートメントに「[列名] =[列名]」(またはその他の値)が含まれている必要があります。含まれていない場合、値は「now()」になります。奇妙な、しかし本当。 5.5.56-MariaDBを使用しています