MySQL·5.6以前对timestamp的一些限制

最近在做一个项目,其中需要建立一张管理员的表,DDL语句如下:

CREATE TABLE `manager` (
  `id` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
  `name` varchar(10) NOT NULL COMMENT '姓名',
  `phone` varchar(11) NOT NULL COMMENT '手机号码',
  `createdAt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updatedAt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `deletedAt` datetime,
  PRIMARY KEY (`id`),
  UNIQUE KEY phone (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员';
复制代码

这一切在我本地环境运行的时候都很正常,但当我在测试环境的数据库运行此段SQL的时候,却出现了如下错误:

[42000][1067] Invalid default value for 'createdAt'
复制代码

一开始我还以为是SQL写错了,所以惯性的检查了一遍SQL,还是没发现毛病,网上的很多回答都是关于SQL_MODEL,但我的SQ_MODEL是空的,所以并不是这个问题。

最后定位到问题是版本的问题,因为我本地的MySQL版本是5.6,而测试环境的是5.5,所以就出现这个问题,关于这个问题还有一点就是在5.5的版本中一个字段是不能同时有两个CURRENT_TIMESTAMP的,而5.6之后就解除了一系列的限制。

Previously, at most one TIMESTAMP column per table could be automatically initialized or updated to the current date and time. This restriction has been lifted. Any TIMESTAMP column definition can have any combination of DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP clauses. In addition, these clauses now can be used with DATETIME column definitions. For more information, see Automatic Initialization and Updating for TIMESTAMP and DATETIME. 官方解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值