当前位置: 首页 > 面试题库 >

为什么在DEFAULT子句中只能有一个带有CURRENT_TIMESTAMP的TIMESTAMP列?

吕峰
2023-03-14
问题内容

为什么在DEFAULT或ON UPDATE子句中只能有一个带有CURRENT_TIMESTAMP的TIMESTAMP列?

CREATE TABLE `foo` (
  `ProductID` INT(10) UNSIGNED NOT NULL,
  `AddedDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `UpdatedDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=INNODB;

导致的错误:

错误代码:1293

表定义不正确;DEFAULT或ON UPDATE子句中只能有一个带有CURRENT_TIMESTAMP的TIMESTAMP列


问题答案:

仅由于历史,代码遗留原因,此限制在MySQL的最新版本中已解除:

MySQL 5.6.5的更改(2012-04-10,里程碑8)

以前,每个表最多可以自动将TIMESTAMP列初始化或更新为当前日期和时间。此限制已解除。任何TIMESTAMP列定义都可以具有DEFAULT
CURRENT_TIMESTAMP和ON UPDATE
CURRENT_TIMESTAMP子句的任意组合。此外,这些子句现在可以与DATETIME列定义一起使用。有关更多信息,请参见TIMESTAMP和DATETIME的自动初始化和更新。

http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html



 类似资料:
  • 问题内容: 尝试创建上述表时,出现以下错误:“ SQL错误(1293):错误的表定义; DEFAULT或ON UPDATE子句中只能有一个TIMESTAMP列,其CURRENT_TIMESTAMP”。 我的问题是一个错误吗?因为可以肯定,我有两个TIMESTAMP列,但是其中只有一个具有默认定义。当我删除startedStamp时,我没有任何错误。 问题答案: 根据MySQL手册5.5版,自动初始

  • 为什么java开关语句不能处理null,因为它有一个“默认”子句? 例如,如果你有类似的东西 “default”不应该处理任何其他值,比如null吗?

  • 问题内容: 我想要一个有两列的表。一栏用于记录的创建时间,另一栏用于记录的修改时间。我希望这些值由数据库处理。我不想让我的应用程序层考虑一下。 我知道,如果您有一个带有或的列,那么您将无法拥有另一个列。您可以使用,但没有办法在触发器之外默认它,据我所知。 我发现您可以具有多个列,方法是将每个列不带或保留,并在创建记录时插入,以使每个列具有当前时间戳。从这一点开始,第一列将自动更新。 这个效果非常好

  • 问题内容: 我(彻底)目前正在学习SQL,并遇到了该子句。 根据您提供的参数对结果集进行汇总或分组。如果在查询中使用此子句,则可以在结果集上执行聚合函数以查找结果集的统计信息,例如查找平均值或频率。 我的问题是:没有随附的聚合函数,GROUP BY语句是否有任何用处? 更新 使用的同义词是(可能)是一个坏主意,因为我怀疑它是慢。 问题答案: 没有随附的汇总功能,GROUP BY语句有什么用吗? 在

  • 我得到了以下实体: } 当调用hibenate时,当hibernate想要创建表时,我得到一个错误。似乎发生了错误,因为列时间戳没有名称: 错误:HHH000389:失败:创建表Person(id int(11)不为null auto_increment,klasse varchar(20)不为null,name varchar(255)不为null,password varchar(255)不为

  • 只是一个普通的Java问题。为什么null变量存在?我正在给CS学生做一些介绍,其中一个最常见的错误是分号,他们不应该在分号上。例如 圆括号前面的分号放错了位置,使if语句无法正常工作,我想知道为什么空行在Java程序中会这样做。在这个例子中,null似乎是一个不利因素,并且想知道什么时候有人会在编码时使用它。