关于MySQL中的timestamp类型

timestamp的显示格式与datetime相同,格式都为YYYY-MM-DD HH:MM:SS

那mysql数据库为何需要两个相同的类型呢?

答:首先是因为 timestamp占用的存储空间比datetime要少,但是我觉得更重要的是timestamp具有自动初始化和自动更新的功能。


timestamp具有:
  1)自动初始化
  2)自动更新 的功能


       如过你想在修改数据列的时候 ,数据库能帮你自动修改 字段 modify_time列,那把modify_time定义为timestamp类型最合适不过了。而且这样的情况在我们的应用程序中很常见,如用户自己修改联系信息,如果有个修改时间字段,那这个修改时间就可以定义为timestamp类型。


使用这个类型的时候需要注意:
        虽然timestamp列类型具有
自动初始化 自动更新 的功能,你可以把自动初始化或自动更新,或者两者都选 给一个列 但是你要记住只是一个列

你不能把一个列 定义为自动初始化,而另外的列定义为自动更新,即这两个属性只能针对数据库表里的某一个列。


(经过测试 这个类型和 数据列定义为 NULL 或 NOT  NULL有关系)

测试组一: 数据列定义为允许 NULL

 `modify_time` timestamp NULL DEFAULT NULL,

从结果来看,插入数据 modify_time列为空,而且不会自动更新。


 `modify_time` timestamp  NULL DEFAULT  CURRENT_TIMESTAMP,

从运行结果来看 modify_time列会自动初始化,但不会自动更新


 `modify_time` timestamp NULL DEFAULT  CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
这个不用猜,肯定是 即会自动初始化又会自动更新。




测试组二:数据列定义为不允许 NULL

`modify_time` timestamp  NOT NULL,

从结果看 这个 即会自动初始化又会自动更新,就是说当我们定义一个timestamp的列为not null时,效果等同于 default current_timestamp on update current_timestamp;


 `modify_time` timestamp  NOT NULL DEFAULT CURRENT_TIMESTAMP,

从结果看 只会自动 初始化 不会自动更新


`modify_time` timestamp  NOT NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP

这个不用说 ,即会自动初始化又会自动更新。



结论很简单:只要记住 当timestamp数据量定义为 not null ,而且没有默认值和 on  update  current_timestamp,其效果等同于 not  null  default current_timestamp  on update current_timestamp


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值