MySQL创建时间和更新时间时间戳

Ais*_*war 14 mysql sql time logging timestamp

我正在创建一些表,我想存储创建记录的时间和上次更新的时间.我以为我可以有两个时间戳字段,其中一个具有值CURRENT_TIMESTAMP,另一个具有该值CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP.但我想我不能这样做,因为你只能在一个表中只有一个带有默认值的时间戳字段?

你会怎么推荐我得到并存储两次?谢谢!

alb*_*ert 28

创建"已创建"和"已更新"等字段的好方法是

CREATE TABLE `mytable` ( 
`id` INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`created` TIMESTAMP DEFAULT '0000-00-00 00:00:00', 
`updated` TIMESTAMP DEFAULT now() ON UPDATE now(),
`myfield` VARCHAR(255)
); 
Run Code Online (Sandbox Code Playgroud)

并且在"插入"期间必须在两列中输入空值:

INSERT INTO mytable (created,updated,myfield) VALUES (null,null,'blablabla');
Run Code Online (Sandbox Code Playgroud)

现在,在所有更新中,"已更新"字段将具有实际日期的新值.

UPDATE mytable SET myfield='blablablablu' WHERE myfield='blablabla';
Run Code Online (Sandbox Code Playgroud)

资料来源:http://gusiev.com/2009/04/update-and-create-timestamps-with-mysql/

  • 这是我发现的最佳解决方案.神奇的是,NULL被转换为插入上的NOW().在典型的应用程序中,有更多的方法来更新行而不是创建它,所以这比使用创建和手动处理更新,使用单独的触发器或其他方法使用"现在一个"更少维护. (2认同)
  • 效果非常好!尽管在我的情况下,我似乎不需要传递空值,只是更新的列发生了变化。看起来效果不错。`在 TIMESTAMP 默认 CURRENT_TIMESTAMP 上创建,在更新 CURRENT_TIMESTAMP 上更新 TIMESTAMP 默认 CURRENT_TIMESTAMP,` ... (2认同)

Dim*_*try 20

从MYSQL版本5.6.5开始,您可以使用DEFAULT和ON UPDATE执行此操作.不需要触发器.

ts_create TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

ts_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP更新CURRENT_TIMESTAMP

  • 现在这就是最好的答案! (2认同)

a_h*_*ame 11

您可以在一个表中有两列类型为timestamp的列.

以下适用于MySQL 5.0

create table t 
(
  id integer, 
  created_at timestamp default current_timestamp, 
  updated_at timestamp
);

我认为你将这与SQL Server混淆(其中时间戳不是真正的"时间戳",并且单个"时间戳"列确实存在限制)

编辑:但每次更改行时,您都需要一个触发器来更新update_at列.