0
点赞
收藏
分享

微信扫一扫

timestamp

q松_松q 2022-08-03 阅读 84

 

 

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

 

 


举报

相关推荐

0 条评论