我有一个 mysql 表,其中有两列经常更改。 一个是“可用”(主要是0,1),另一个是“notification_preference”。 现在,我想创建一个“updated_at”列来跟踪“available”列的更改。
我了解到,如果相应行的列发生更改,TIMESTAMP 类型会自动更新。我想使用“updated_at”列来仅跟踪“可用”列。
所以问题是,我应该创建一个包含“available”和“updated_at(TIMESTAMP)”的新表,还是将数据保留在同一个表中并手动更改“updated_at”表? 主表如下:
......................................................
id 整数
名称 varchar
用户名 varchar
密码varchar
可用的tinyint
更新时间
我想做的是:
主表
......................................................
id 整数
名称 varchar
用户名 varchar
密码varchar
可用的tinyint
更新时间
另一个可用的表
......................................................
用户 ID
可用的tinyint
更新时间为时间戳
哪个程序更好?
主表中的其他列有时可能会更改,因此我无法在主表中使用 TIMESTAMP 来表示“updated_at”。因为如果该表的其他列被更新,那么“updated_at”也会被更新,但我不希望这样。 提前致谢。
最佳答案
您可以使用触发器,仅当 available
中的值发生更改时才会更新 updated_at
列:
create trigger mainTable_before_update before update on mainTable
for each row begin
if new.available <> old.available
then set new.updated_at = now();
end if;
end
对于插入,您仍然可以在 CREATE 语句中使用 DEFAULT CURRENT_TIMESTAMP
:
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
正如您将在 Demo 中看到的那样当我们更改密码时,该列不会更新。但当我们更改可用
时,它会更新。
关于mysql - 使用 TIMESTAMP 数据类型创建单独的表来跟踪特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47727294/