今天做一个秒杀项目建表的时候,发现在时间后面增加了这样一个语句:
CREATE TABLE `product` (
`id` bigint NOT NULL COMMENT '商品id',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '商品名称',
`number` int NOT NULL DEFAULT '0' COMMENT '商品数量',
`start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '秒杀开始时间',
`end_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '秒杀结束时间',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
`product_img` varchar(255) DEFAULT NULL COMMENT '商品图片',
PRIMARY KEY (`id`),
KEY `idx_name` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
不是很懂这个ON UPDATE CURRENT_TIMESTAMP
的意思,于是去网上了解了一下,意思是字段中的值发生变化时更新该时间戳
手动验证一下,更新数据:
原数据:
1、不改变原数据更新
update product set name = 'Spring Boot' where id = 1
结果:
2、改变原数据更新
update product set name = 'Spring Boot3' where id = 1
结果:
得出结论:
ON UPDATE CURRENT_TIMESTAMP
的作用是:
更新字段时,只有字段中的值发生变化了,你的时间字段才会变为UPDATE操作时的时间。