设置TIMESTAMP和DATETIME的自动初始化及自动更新
2018-06-18 01:42:35来源:未知 阅读 ()
最近有一个关于MySQL版本升级的事,涉及到一些关于时间类型的细节问题需要查明,因此到官网找到相关文章,翻出来比较方便自己理解,博客这里也贴一下。
参考官网网址:
https://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
- DATETIME也可以像TIMESTAMP一样将CURRENT_TIMESTAMP设为默认值
- 如果你为此时间列设置了自动更新的属性,那么只要一条记录的其他任何列值发生改变,时间列都会自动更新为CURRENT_TIMESTAMP。
- 在8.0.2版本之前,如果你定义了这样一个列:ts timestamp [not null] default xxx,那么除非你显式的给此列赋一个非NULL的值,否则一律插入的当前时间戳,无论你的default值设置的是什么,你可以将其视为一个BUG。你可以通过将explicit_defaults_for_timestamp设置为ON来避免这个现象。
- 在8.0.2版本之前,如果你定义了一个ts timestamp [not null]列,但没有设置默认值,那么实质上这个列是ts timestamp not null default current_timestamp on update current_timestamp,同样的你可以通过设置explicit_defaults_for_timestamp为ON来解决此问题。
- 当explicit_defaults_for_timestamp为OFF时,除非指定timestamp可为NULL,否则MySQL自动为timestamp设置not null属性。
CREATE TABLE t1 ( ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t1 ( ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP, dt DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE t1 ( ts TIMESTAMP DEFAULT 0, dt DATETIME DEFAULT 0 );
CREATE TABLE t1 ( ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP, dt DATETIME DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP );
CREATE TABLE t1 ( ts1 TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- default 0 ts2 TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP -- default NULL ); CREATE TABLE t1 ( dt1 DATETIME ON UPDATE CURRENT_TIMESTAMP, -- default NULL dt2 DATETIME NOT NULL ON UPDATE CURRENT_TIMESTAMP -- default 0 );
CREATE TABLE t1 ( ts1 TIMESTAMP DEFAULT 0, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); CREATE TABLE t2 ( ts1 TIMESTAMP NULL, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); CREATE TABLE t3 ( ts1 TIMESTAMP NULL DEFAULT 0, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
- 3个表的第一个timestamp列都没有自动初始化和自动更新的属性。(自动初始化是指调用的系统时间函数)
- 3个表的差别在于ts1列对NULL值的处理,t1.ts1非空,当你为他赋值为NULL时插入的其实是当前时间戳,t2.ts1,t3.ts1允许null值,因此当你插入NULL时最终被插入的就是NULL。
- t2和t3对于ts1的默认值处理也不一样,t2.ts1允许null值且未定义默认值,因此默认值就是NULL,t3.ts1允许null值且定义了default 0,因此默认值就是0。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:远程连接MySQL服务器
下一篇:SQL语句学习
- Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法 2019-09-30
- Mysql 局域网连接设置——Windows 2019-08-13
- MySQL的sql_mode模式说明及设置 2019-07-24
- mysql日志信息查看与设置mysql-bin 2019-07-24
- Mysql-MariaDB设置延迟同步 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash