timestamp

use database_name;

--
--  namespace table
--

CREATE TABLE `table_name`
(
    `id`          int(11)      NOT NULL AUTO_INCREMENT,
    `name`        varchar(128) NOT NULL COMMENT '名字',
    `create_time` timestamp    NOT NULL COMMENT '创建时间',
    `update_time` timestamp    DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_name` (`name`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8 COMMENT ='table_name'
  AUTO_INCREMENT = 1;

######上面的建表语句不会成功执行,需要修改成下面这样的,原因是因为timestamp类型的字段与CURRENT_TIMESTAMP

use database_name;

--
--  namespace table
--

CREATE TABLE `table_name`
(
    `id`          int(11)      NOT NULL AUTO_INCREMENT,
    `name`        varchar(128) NOT NULL COMMENT '名字',
    `create_time` timestamp     NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间',
    `update_time` timestamp    NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_name` (`name`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8 COMMENT ='table_name'
  AUTO_INCREMENT = 1;

 ##########################################################################################################

而在mysql5.7中,如果你按照mysql5.5中那样默认设置timestamp字段默认值,则可能会有问题,与sql_mode有关。

sql_mode=‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’

如果 `create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间',这样的语句保持不变的话,那么就需要改变全局变量sql_mode的值,去掉NO_ZERO_IN_DATE,NO_ZERO_DATE这两个约束。

sql_mode=‘STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’
# 修改集群上的每个机器线上的sql_mode,同时需要修改配置文件。
原文地址:https://www.cnblogs.com/igoodful/p/11684226.html