MYSQL中timestamp數據類型的默認值及其自動更新問題

表的建立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_timeend_timecreate_timetimestamp, 帶有默認值 CURRENT_TIMESTAMPsql

初始化數據: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_timeend_timecreate_time均更新爲當前系統時間date

現象:timestamp類型的字段在沒有顯式更新的時候也自動更新了秒殺

緣由:im

`end_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '秒殺結束時間'

UPDATE CURRENT_TIMESTAMP 影響的,即便沒有顯示更新該列數據,依然會被mysql主動更新數據

相關文章
相關標籤/搜索