表的建立mysql
CREATE TABLE `seckill` ( `seckill_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品庫存id', `name` varchar(120) NOT NULL COMMENT '商品名稱', `number` int(11) NOT NULL COMMENT '庫存數量', `start_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '秒殺開始時間', `end_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '秒殺結束時間', `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '秒殺建立時間', PRIMARY KEY (`seckill_id`), ) ENGINE=InnoDB AUTO_INCREMENT=1016 DEFAULT CHARSET=utf8 COMMENT='秒殺庫存表'
其中,start_time
、end_time
、create_time
是timestamp
, 帶有默認值 CURRENT_TIMESTAMP
sql
初始化數據:iphone
INSERT INTO seckill(seckill_id, name, number, start_time, end_time) VALUES (1014, '1000元秒殺iphone6', 100, '2018-01-01 00:00:00', '2018-12-01 00:00:00');
以下,執行update語句code
UPDATE seckill SET number = number - 1 WHERE seckill_id = 1014
執行後的數據:ip
start_time
、end_time
、create_time
均更新爲當前系統時間date
現象:timestamp類型的字段在沒有顯式更新的時候也自動更新了秒殺
緣由:im
`end_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '秒殺結束時間'
UPDATE CURRENT_TIMESTAMP
影響的,即便沒有顯示更新該列數據,依然會被mysql主動更新數據