mysql - 使用 TIMESTAMP 数据类型创建单独的表来跟踪特定列

标签 mysql database-design

我有一个 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/

相关文章:

mysql 每个 id 返回 1 行

mysql - MySQL 中的并行操作建模

sql-server - 为什么我无法在 SSMS 中删除(编辑)具有 xml 值的行?

php - 复杂的 Laravel 关系

mysql - 链接相关标签的最佳数据库设计

mysql - 更新前更新同一个表中的不同行

MySQL 无法添加外键约束 错误代码 : 1215

php - MySQL VARCHAR 字段或 PHP substr

mysql - Cron 设置为使用 crontab 每 5 分钟插入一次数据到表中,但仅在整点插入 (1 :00) not every 5 minutes as expected

mysql - 数据库查询——更好地计算行数还是更好地保留增量计数器?