在平常中,我们总会有这样的需求,在插入或者修改时插入当前系统时间,有些童鞋的做法是把时间字段类型设置为datetime
,然后在PHP端用date函数拼接SQL语句,或者使用NOW()
函数。其实在MySQL中,datetime
只是表示数据类型为YYYY-mm-dd HH:ii:ss
格式,而timestamp
类型则表示当前系统时间,无需写值。
我们创建一个b表,字段t1类型为datetime
,t2类型为timestamp
mysql> create table b(t1 datetime,t2 timestamp);
Query OK, 0 rows affected (0.01 sec)
mysql> desc b;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+-------------------+-----------------------------+
| t1 | datetime | YES | | NULL | |
| t2 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+
2 rows in set (0.00 sec)
我们插入一条t1和t2都是null空值的记录
mysql> insert into b values(null,null);
Query OK, 1 row affected (0.03 sec)
看看结果
mysql> select * from b;
+------+---------------------+
| t1 | t2 |
+------+---------------------+
| NULL | 2012-07-04 13:31:11 |
+------+---------------------+
1 row in set (0.00 sec)
我们发现,t1的值为NULL,t2的值为执行插入语句时的系统时间。所以如果有增改记录更新当前系统时间的可以把字段类型设置为timestamp
,这样在SQL语句里就不需要再为该字段赋值即可完成插入当前系统时间的操作。
最后提示一下一个表中只能有一个字段的类型为timestamp类型