MySQL数据库的数据类型timestamp的自动更新

MySQL记录

前几天差点搞出来一个大飞机安静,项目开发使用的MySQL数据库,其中有一张表使用的数据类型为timestamp日期类型,本来用的好好的,在测试的时候出现了一个BUG。

demo

如下面的SQL语句:
CREATE TABLE USER(
 user_id VARCHAR(10),
 user_name VARCHAR(20),
 birthday TIMESTAMP,
 create_time TIMESTAMP,
 modify_time TIMESTAMP
)
看起来好好的吧,但是当执行插入数据操作的时候,如:
INSERT INTO USER(user_id)
	VALUES('u001');

得到的结果是:
看到没有?我没有赋值啊,但是数据库默认给我添加了一个当前日期的值,这样不行啊! 难过

自动赋值条件

下面是在百度搜索到的有关自动更新信息:
你可以使用TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。
如果你有多个TIMESTAMP列,只有第一个自动更新。
自动更新第一个TIMESTAMP列在下列任何条件下发生:
   1、列值没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。
   2、列值没有明确地在一个UPDATE语句中指定且另外一些的列改变值。
       (注意一个UPDATE设置一个列为它已经有的值, 这将不引起TIMESTAMP列被更新, 因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)
   3、你明确地设定TIMESTAMP列为NULL.
   4、除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()

验证

1.insert的时候,在上面的demo已经被验证。

2.update的时候,执行SQL之前

执行
UPDATE USER
	SET user_name = '更新'
	WHERE user_id = 'u001';
结果:

可以看到时间从00:04变成00:06,时间自动更新了。

3,设置为null的时候。
INSERT INTO USER(user_id,birthday)
	VALUES('u003',NULL);

4.其他列测试
INSERT INTO USER(user_id,birthday,create_time,modify_time)
	VALUES('u004',NULL,NULL,NOW());

疑问

我查询到有的说,timestamp只能设置一个列默认值,因为数据库认为数据重复了,所以不需要重复添加,所以除了第一个timestamp可以设置默认的当前值,后面的都不能设置,当时我测试是可以的。
CREATE TABLE USER(
 user_id VARCHAR(10),
 user_name VARCHAR(20),
 birthday TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
 modify_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)

这句SQL是可以执行通过的,结果:

数据库表结构查看:

我的MySQL版本:

*注:建议使用datatime类型



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值