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