1. 为数据表添加创建时间、修改时间
-- 向table_demo表添加新的字段:创建时间(c_time),默认值为当前时间。
ALTER table_demo ADD c_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
-- 向table_demo表添加新的字段:修改时间(m_time),默认值为数据更新时间。
ALTER table_demo ADD m_time DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
2. current_timestamp on update 的效果
数据表中的记录(record)的任意字段有更新时,该记录的m_time(修改时间)字段均会自动更新为update语句执行的时间。
3. 误区
误: 任意一条update语句执行时,m_time均会自动更新为语句执行时间。
正: 只有update语句对原有数据做到了实质性更新,m_time才会更新为执行时间,否则m_time将保持不变。
4. 举例:
table_demo原有数据如下:
id | name | c_time | m_time |
---|---|---|---|
1 | menber01 | 2020/06/06 0:00:00 | 2020/06/06 0:00:00 |
2 | menber02 | 2020/06/06 0:00:00 | 2020/06/06 0:00:00 |
现在分别执行以下两条语句:
-- 语句1,name字段在语句执行前后无变化,不存在实质性变更
UPDATE table_demo SET name = menber01 WHERE id =1;
-- 语句2,name字段在语句执行后发生改变,即存在实质性变更。
UPDATE table_demo SET name = aaa WHERE id =1;
语句1执行后,table_demo结果:
id | name | c_time | m_time |
---|---|---|---|
1 | menber01 | 2020/06/06 0:00:00 | 2020/06/06 0:00:00 |
2 | menber02 | 2020/06/06 0:00:00 | 2020/06/06 0:00:00 |
语句2执行后,table_demo结果:
id | name | c_time | m_time |
---|---|---|---|
1 | aaa | 2020/06/06 0:00:00 | 2020/06/07 18:00:00 |
2 | menber02 | 2020/06/06 0:00:00 | 2020/06/06 0:00:00 |