1. 一般建表时候,创建时间用datetime,更新时间用timestamp。这是非常重要的。
  2.  
  3. 我测试了一下,如果你的表中有两个timestamp字段,只要你更新任何非timestamp字段的值,则第一个timestamp列会更新成当前时间,而第二人timestamp列的值不变。
  4.  
  5. ————————————————————————-
  6. MySQL5日期类型DATETIMETIMESTAMP 相关问题详解
  7.  
  8. MySQL5的日期类型有三种:DATETIMEDATETIMESTAMP,除了DATE用来表示一个不带时分秒的是日期,另外两个都带时分秒。TIMESTAMP还可以精确到毫秒。
  9.  
  10. 其次还有个共性,就是他们的格式“不严格”,很自由,一般你认为对的格式都可以正确插入到数据库中。
  11.  
  12. 这里主要解决带时分秒日期的一些常见问题。
  13.  
  14. 一、IMESTAMP
  15.  
  16. TIMESTAMP列必须有默认值,默认值可以为“-- ::”,但不能为null
  17. TIMESTAMP列不可以设置值,只能由数据库自动去修改。
  18. 、一个表可以存在多个TIMESTAMP列,但只有一个列会根据数据更新而改变为数据库系统当前值。因此,一个表中有多个TIMESTAMP 列是没有意义,实际上一个表只设定一个TIMESTAMP列。
  19. TIMESTAMP列的默认值是CURRENT_TIMESTAMP常量值。当纪录数据发生变化的时候,TIMESTAMP列会自动将其值设定为CURRENT_TIMESTAMP
  20. TIMESTAMP列创建后的格式是:
  21. `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  22. 这个语句含义,a字段的默认值是CURRENT_TIMESTAMP,当纪录更新时候,自动将a字段的值设置为 CURRENT_TIMESTAMP
  23. 、另外,下面的定义从语法角度是对的,但是没有意义,因为该字段的值不可更改,永远只能为默认值。
  24. `b` timestamp NOT NULL DEFAULT ‘-- ::′,
  25.  
  26. 二、DATETIME
  27.  
  28. DATETIME列可以设置为多个,默认可为null,可以手动设置其值。
  29. DATETIME列不可设定默认值,这是很多人煞费苦心研究的成果,呵呵!
  30. DATETIME列可以变相的设定默认值,比如通过触发器、或者在插入数据时候,将DATETIME字段值设置为now(),这样可以做到了,尤其是后者,在程序开发中常常用到。
  31.  
  32. 一般建表时候,创建时间用datetime,更新时间用timestamp
  33. CREATE TABLE user (
  34. id bigint() NOT NULL AUTO_INCREMENT,
  35. name varchar() CHARACTER SET gbk NOT NULL,
  36. sex tinyint() DEFAULT ‘′,
  37. state smallint() DEFAULT ‘′,
  38. createtime datetime NOT NULL,
  39. updatetime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  40. PRIMARY KEY (id)
  41. ) ENGINE=MyISAM AUTO_INCREMENT= DEFAULT CHARSET=latin1
  42.  
  43. 三、日期最大值范围的问题
  44.  
  45. 日期最大范围的问题不是绝对的,很多人制定一个说不能查过20XX年,这是扯蛋,根本没这回事。日期的范围等问题与MySQL的运行模式有关。当然这个范围很宽广,足够祖宗十八代用了,不用担心这问题了。
  46.  
  47. 相反,要注意的问题是,编程语言对日期范围的限制,不同的语言,有不同的限制,这里不做讨论了。
  48.  
  49. 四、日期格式转换
  50.  
  51. 、字符串转日期
  52. select STR_TO_DATE(‘-- ::′, ‘%Y-%m-%d %H:%i:%s’)
  53.  
  54. 、日期转字符串
  55. select DATE_FORMAT(‘-- ::′, ‘%Y-%m-%d %H:%i:%s’)
  56.  
  57. 五、日期的中年月日时分秒星期月份等获取方法
  58.  
  59. select TIMESTAMP(‘-- ::′);
  60.  
  61. select DATE(‘-- ::′);
  62.  
  63. select YEAR(‘-- ::′);
  64.  
  65. select MONTH(‘-- ::′);
  66.  
  67. select DAY(‘-- ::′);
  68.  
  69. select TIME(‘-- ::′);
  70.  
  71. select CURTIME();
  72.  
  73. select CURDATE();
  74.  
  75. select CURRENT_DATE;
  76.  
  77. select CURRENT_TIME;
  78.  
  79. select CURRENT_TIMESTAMP;
  80.  
  81. 方式很多,这里简单列举一二。
  82.  
  83. 六、日期的算术运算
  84.  
  85. 相关的函数很多很多,用法也很简单,一看就会,建议查看MySQL参考手册。
  86. mysql> SELECT DATE_ADD(‘--′, INTERVAL DAY);
  87.  
  88. -> ‘--′
  89.  
  90. mysql> SELECT DATE_ADD(‘--′, INTERVAL HOUR);
  91.  
  92. -> ‘-- ::′
  93.  
  94. mysql> SELECT DATE_ADD(‘--′, INTERVAL MONTH);
  95.  
  96. -> ‘--′
  97.  
  98. 七、日期的大小比较
  99.  
  100. 拿着日当数字,拿着字符串当日期,呵呵,很简单的。
  101. and update_time > ‘-- ::′
  102. and update_time <= ‘-- ::′

mysql TIMESTAMP 不能为NULL的更多相关文章

  1. MYSQL timestamp NOT NULL插入NULL的报错问题

    1. 在开发两个数据库数据同步功能的时候,需要在本地搭建一个本地的数据库作为一个本地库,然后用于同步开发库中的数据.在插入的时候出现了一个问题. 问题描述: 我们每张表中都会存在一个create_ti ...

  2. 【MySQL】探究之null与not null

    相信很多用了mysql很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问: 我字段类型是not null,为什么我可以插入空值 为毛not null的效率比null高 判断字段不为空的时候 ...

  3. [mysql] timestamp自动更新和初始化

    1.概述 在我们设计表的时候,考虑将行数据的创建时间和最后更新时间记录下来是很好的实践.尤其是可能需要做数据同步或者对数据新鲜度有要求的表.举些应用场景,更新距上次更新超过2小时的行数据,或者是将一个 ...

  4. 转!!mysql 字段 is not null 和 字段 !=null

      今天在查询数据时,查到包含一条某个时间startTime(该字段默认为null ) 为null的记录,想把它过滤,加了 startTime != null 的条件,结果记录都没了,应该用条件 is ...

  5. Mysql的空值与NULL的区别

    Mysql数据库是一个基于结构化数据的开源数据库.SQL语句是MySQL数据库中核心语言.不过在MySQL数据库中执行SQL语句,需要小心两个陷阱. 陷阱一:空值不一定为空 空值是一个比较特殊的字段. ...

  6. Mysql 聚合函数返回NULL

    [1]聚合函数返回NULL 当where条件不满足时,聚合函数sum().avg()的返回值为NULL. (1)源数据表 (2)如下SQL语句 SELECT sClass, COUNT(*) AS t ...

  7. mysql timestamp字段定义的

    Cause: java.sql.SQLException: Cannot convert value '2017-07-26 20:40:41.000000' from column 10 to TI ...

  8. mysql TIMESTAMP 设置为可NULL字段

    今天遇到问题是mysql新建表的时候TIMESTAMP 类型的字段 默认是NOT NULL 然后上网查了一下 发现 很多都说 就是不能为NULL的 这都什么心态 其实设置为空很简单 只要在字段后面加上 ...

  9. MySQL timestamp NOT NULL插入NULL的问题

    explicit_defaults_for_timestamp MySQL 5.6版本引入 explicit_defaults_for_timestamp 来控制对timestamp NULL值的处理 ...

随机推荐

  1. Java int和Integer包装类的区别和比较

    区别:                                                                                                  ...

  2. Java 多线程 - synchronized与Lock的区别

    https://blog.csdn.net/qq_39521554/article/details/81130442 http://www.cnblogs.com/huangbw/p/8516024. ...

  3. SQL Server 添加数据库没有权限等

    { 在安装好sql 后 第一次需要用windows 方式登陆 1.创建一个宁外一个登陆名登陆 在安全->登陆名 2.给此登陆属性的服务器角色添加sysadmin权限 //尽情享受!!! }

  4. Windows exit

    退出 CMD.EXE 程序(命令解释器)或当前批处理脚本. EXIT [/B] [exitCode] /B          指定要退出当前批处理脚本而不是 CMD.EXE.如果从一个         ...

  5. CSS-基本语法/引用/文本设置/选择器/css3属性

    CSS-基本语法/引用/文本设置 css基本语法及页面引用 css基本语法 css的定义方法是: 选择器 { 属性:值; 属性:值; 属性:值;} 选择器是将样式和页面元素关联起来的名称,属性是希望设 ...

  6. thinkphp url模式

    入口文件是应用的单一入口,对应用的所有请求都定向到应用入口文件,系统会从URL参数中解析当前请求的模块.控制器和操作: http://serverName/index.php/模块/控制器/操作 这是 ...

  7. 锁定文件失败 打不开磁盘“D:\vms\S1\CentOS 64 位.vmdk”或它所依赖的某个快照磁盘(强制关机后引起的问题)

    电脑强制关机后,centos系统启动失败,报异常:锁定文件失败 打不开磁盘“D:\vms\S1\CentOS 64 位.vmdk”或它所依赖的某个快照磁盘.解决办法:进入D:\vms\S1目录,删除下 ...

  8. 关于web前端网站优化

    不知道是哪位大牛的文章,转过来嘻嘻. 作者:斯迪链接:https://www.zhihu.com/question/21658448/answer/18903129来源:知乎著作权归作者所有.商业转载 ...

  9. 命令学习_nslookup

    nslookup 域名 这是最常用最简单的用法,可以直接获得目标域名的IP地址和CNAME. 如下是A记录的返回情况 nslookup命令会采用先反向解释获得使用的DNS服务器的名称,上图中ns.gu ...

  10. 云-腾讯云-实时音视频:实时音视频(TRTC)

    ylbtech-云-腾讯云-实时音视频:实时音视频(TRTC) 支持跨终端.全平台之间互通,从零开始快速搭建实时音视频通信平台 1.返回顶部 1. 腾讯实时音视频(Tencent Real-Time ...