【问题标题】:Exclude some fields from updating a field with default value of CURRENT_TIMESTAMP排除某些字段更新默认值为 CURRENT_TIMESTAMP 的字段
【发布时间】:2020-01-24 20:29:15
【问题描述】:

我在 MySQL 中有一个表,其中有 4 个字段,分别为 idnamegendertimestamp
时间戳的默认值为CURRENT_TIMESTAMP,因此如果姓名或性别发生变化,时间戳会更新为当前日期和时间。
我想从更新该时间戳中排除性别字段。
这可能吗?

【问题讨论】:

  • 感谢您的回复。我编辑了我的问题,但实际上没有任何代码!只是一个简单的表格。
  • 没有“简单”的方法可以做到这一点。一种“干净”的方式可能是将该列外包给另一个表。

标签: mysql


【解决方案1】:

我会使用 MySQL 触发器来完成此操作。您没有提供表名,所以我将调用您的表PERSON

触发器应如下所示:

delimiter ;;
DROP TRIGGER IF EXISTS `TRIGGER_PERSON_AFTER_UPDATE`;;

CREATE TRIGGER `TRIGGER_PERSON_AFTER_UPDATE` AFTER UPDATE ON PERSON
FOR EACH ROW
 BEGIN
   IF (NEW.name != OLD.name) THEN
      NEW.time_stamp = CURRENT_TIMESTAMP;
   END IF;
 END;;

delimiter ;

【讨论】:

  • 我之前没用过触发器。这对我来说是一个很好的做法。谢谢!我应该删除时间戳的默认值。对吗?
  • 我会保留默认值,以便在 INSERT 上将 time_stamp 列设置到数据库表中。
  • 我明白了。非常感谢!
【解决方案2】:

更新gender 时,您必须为timestamp 指定相同的值。我假设如果您将其他字段与gender 一起更改,那么时间戳应该会更新。

UPDATE my_table SET gender = ?, `timestamp`=`timestamp`

【讨论】:

  • 所以没有办法按照我的意愿定义表格?
  • 不,请参阅 Gabriel 的替代方案。之前也问过类似的问题,不知道对你有没有帮助:stackoverflow.com/a/2844893/1839439
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多