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,同时需要修改配置文件。