在MySQL中,设置列的默认值为当前日期和时间是一个常见的需求,尤其是在需要记录数据插入或更新时间的场景中,MySQL并不直接支持将函数(如NOW())设置为列的默认值,但可以通过使用TIMESTAMP列类型来实现类似的功能。
使用TIMESTAMP列类型实现默认值为当前时间
1、TIMESTAMP列的特性:
TIMESTAMP列可以自动记录行的插入或更新时间。
它支持多种显示格式,从2位到14位不等,但存储时总是使用完整的14位精度。
当插入新行时,如果未指定TIMESTAMP列的值,它会自动设置为当前的日期和时间。
2、创建包含TIMESTAMP列的表:
CREATE TABLE test ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, datetime_col TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
在这个例子中,datetime_col
将在插入新行时自动设置为当前时间,并在每次更新该行时刷新为新的当前时间。
3、插入数据并验证:
INSERT INTO test (id) VALUES (1); SELECT * FROM test;
这将显示datetime_col
列为插入时的当前时间。
4、更新数据并验证:
UPDATE test SET id = 2 WHERE id = 1; SELECT * FROM test;
这将显示datetime_col
列为更新时的当前时间。
注意事项
如果表中有多个TIMESTAMP列,只有第一个TIMESTAMP列会自动更新,其他TIMESTAMP列需要显式设置为NULL或NOW()才能更新为当前时间。
TIMESTAMP列的显示格式可能与存储格式不同,一个定义为TIMESTAMP(8)的列实际上存储了14位的数据,但在查询时只显示8位。
不合法的TIMESTAMP值将被转换为适当类型的“零”值(如00000000000000)。
虽然MySQL不支持直接将函数设置为列的默认值,但通过使用TIMESTAMP列类型并结合默认值和更新特性,可以实现类似的功能,这对于需要记录数据操作时间的应用场景非常有用。