与current_timestamp解MySQL错误的时间戳列
复制代码代码如下所示:
创建表(例如)
` ID `整数符号的非空auto_increment,
`创建时间戳不`零违约current_timestamp,
` lastUpdated `时间空更新current_timestamp,
主键(id)
InnoDB引擎=);
这一段SQL是从项目中提取出来的,测试机器上的一切都正常,但是MySQL在部署到生产机器时是错误的。
复制代码代码如下所示:
错误1293(hy000):不正确的表定义;只能有一个时间戳列
只有一个current_timestamp timestamp列,但为什么本地测试没有问题,本地测试机5.6.13 MySQL安装的版本,和机器生产安装的版本是5.5,搜索网络,两个版本之间的时间戳的处理是不同的:
MySQL 5.5文档中有这样一个词:
复制代码代码如下所示:
表中的一个时间戳列可以将当前时间戳作为初始化列作为自动更新值的默认值,或者两者都是。当前的时间戳不可能是一列的默认值,也不可能是另一列的自动更新值。
和下面的变化已经使MySQL 5.6.5:
复制代码代码如下所示:
以前,最多一个时间戳列可以自动初始化或更新到当前日期和时间。这一限制已解除。任何时间戳列的定义可以有默认current_timestamp任意组合和更新current_timestamp条款。此外,这些条款现在可以使用datetime列的定义。有关更多信息,参见自动初始化和更新时间和日期。
根据在线解决方案,您可以使用触发器来替换它。
复制代码代码如下所示:
创建表(例如)
` ID `整数符号的非空auto_increment,
`创建时间戳不`零违约current_timestamp,
` lastUpdated `日期不为空,
主键(id)
InnoDB引擎=);
如果存在` update_example_trigger `触发降;
分隔符
创建触发器` update_example_trigger `之前更新`例`
为每一行设置新的。` lastUpdated ` =现在()
分隔符;