Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个具有多个时间戳列的Mysql表_Mysql_Timestamp - Fatal编程技术网

一个具有多个时间戳列的Mysql表

一个具有多个时间戳列的Mysql表,mysql,timestamp,Mysql,Timestamp,我想要一个有两列时间戳的表。一列用于跟踪记录的创建时间,另一列用于跟踪记录的修改时间。我希望这些值由数据库处理。我不想让我的应用层不得不考虑它 我知道,如果您有一个时间戳列和一个默认当前时间戳或一个更新当前时间戳列,您就不能有另一个时间戳列。您可以使用DATETIME,但据我所知,无法在触发器之外对其进行默认设置 我发现,在创建记录时,不使用DEFAULT或ON UPDATE并插入NULL,从而使每个记录都具有当前的时间戳,从而使每个记录都具有当前的时间戳。从该点开始,第一列将自动更新 这项工作

我想要一个有两列时间戳的表。一列用于跟踪记录的创建时间,另一列用于跟踪记录的修改时间。我希望这些值由数据库处理。我不想让我的应用层不得不考虑它

我知道,如果您有一个
时间戳
列和一个
默认当前时间戳
或一个
更新当前时间戳
列,您就不能有另一个
时间戳
列。您可以使用
DATETIME
,但据我所知,无法在触发器之外对其进行默认设置

我发现,在创建记录时,不使用
DEFAULT
ON UPDATE
并插入
NULL
,从而使每个记录都具有当前的时间戳,从而使每个记录都具有当前的时间戳。从该点开始,第一列将自动更新


这项工作非常出色,但它给我留下了一种有趣的感觉。这可能是一个bug,可以随时修补。如果这是它应该工作的方式,那就这样吧。我将愉快地走我的路。有人能告诉我这是最好的方法还是应该使用触发器吗?

MySQL文档中记录了这一点:

此外,您可以初始化或更新任何时间戳列到 通过为当前日期和时间分配空值,除非 使用NULL属性定义以允许NULL值


5.6.1之前的MySQL版本不允许在同一个表中有两个
时间戳
列,除非您正确地指出,去掉默认值并允许null

MySQL 5.6.+允许在一个表中有两个或多个
时间戳


更多信息:

MySQL允许在同一个表中有多个时间戳列,请检查此示例:

CREATE TABLE t1 (
  ts1 TIMESTAMP DEFAULT 0,
  ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t2 (
  ts1 TIMESTAMP NULL,
  ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t3 (
  ts1 TIMESTAMP NULL DEFAULT 0,
  ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                ON UPDATE CURRENT_TIMESTAMP);

请注意,ts1 TIMESTAMP列默认值为0,ts2 TIMESTAMP列默认值为CURRENT_TIMESTAMP。这里有更多信息

使用MySQL 5.6.5,可以在一个表中独立控制多个时间戳,因此此规则已更改。