有没有办法为MySQL中的记录上的最后更新字段创建时间戳?

时间:2013-06-27 09:58:20

标签: php mysql timestamp records

有没有办法在mysql表中添加一个标志,我可以在每个记录中放置最后更新字段的时间戳和字段名称?

2 个答案:

答案 0 :(得分:1)

您可以通过触发器实现目标。您无需更新指示已更新内容的列。

见这个例子:

drop table if exists foo;
create table foo(a int, b int, c int, 
                 modified timestamp on update current_timestamp, 
                 whichOne varchar(255)
                );
insert into foo (a, b, c) values (1, 2, 3), (4, 5, 6);

drop trigger if exists foomod;
delimiter $$
create trigger foomod before update on foo 
for each row
begin
set @cols = '';
if old.a != new.a then
set @cols = CONCAT(@cols, ', ', 'a');
elseif old.b != new.b then
set @cols = CONCAT(@cols, ', ', 'b');
elseif old.c != new.c then
set @cols = CONCAT(@cols, ', ', 'c');
end if;
set new.whichOne = @cols;
end $$
delimiter ;

select * from foo;

结果:

a   b   c   modified    whichOne
1   2   3       
4   5   6       

update foo set b = 10 where b = 2;

select * from foo;

结果:

a   b   c   modified    whichOne
1   10  3   2013-06-27 12:45:29Z    , b
4   5   6       

当然还有改进的余地,但你明白了,对吗?

答案 1 :(得分:0)

ALTER TABLE `YOUR_TABLE_NAME_HERE` ADD LastUpdatedColumns TEXT NULL;
ALTER TABLE `YOUR_TABLE_NAME_HERE` ADD LastUpdated TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

然后在进行更新时查询类似

的内容
$fieldsupdated = "field1, field2, field3";
$sql = "UPDATE `YOUR_TABLE_NAME_HERE` SET LastUpdatedColumns='$fieldsupdated';

然后,如果您想在将来的某个列编辑的最后时间/日期进行报告,您可以执行类似

的操作
$sql = "SELECT LastUpdated FROM `YOUR_TABLE_NAME_HERE` WHERE LastUpdatedColumns LIKE '%field1%'

有更好的方式来做这件事,而不是像我想的那样广泛,但我不能为我的生活今天把它想到头顶。