MySQL 通过使用timestamp
类型的两个时间戳字段跟踪数据的创建和更新时间
在进行MySQL数据库设计时,我们通常需要两个重要的时间戳字段来维护数据的记录时间和更新时间。这些时间戳的字段类型非常明显,分别为created_at
和 updated_at
。但是,在实际使用时,当我们只需要在数据插入时记录创建时间戳时,可能需要一些特定的设置来实现这一功能。
阅读更多:MySQL 教程
在MySQL中使用TIMESTAMP字段类型
首先,让我们看一下如何在MySQL中定义timestamp
字段类型。下面是一个示例表,其中包含一个created_at
和 updated_at
字段:
CREATE TABLE `my_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
从上面的代码可以看出,created_at
和updated_at
都是timestamp
类型的字段。 created_at
字段设置为DEFAULT CURRENT_TIMESTAMP
,可以自动插入当前时间戳当创建新数据时。 另外updated_at
字段设置为DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
,可以自动在每次更新数据时更新时间戳。
没有ON UPDATE CURRENT_TIMESTAMP的timestamp字段
但是,有时我们可能只需要在数据插入时记录创建时间戳,而不需要在每次更新时更新该时间戳。为了实现这一点,我们可以使用没有ON UPDATE CURRENT_TIMESTAMP
设置的 timestamp
字段类型,如下所示:
CREATE TABLE `my_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
该created_at
字段与上一个示例的created_at
字段相同,但updated_at
字段被设置为空,并且没有默认值。 因此,在插入新数据时,created_at
将自动记录当前时间戳,而updated_at
将保持为空。 这样,就可以只在插入时创建时间戳字段。
总结
在MySQL中,通过使用timestamp
类型的两个时间戳字段,我们可以轻松地跟踪数据的创建和更新时间。对于只需在创建数据时记录时间戳的情况下,可以通过不使用ON UPDATE CURRENT_TIMESTAMP
设置timestamp
字段来实现。