MySQL 自动更新特定列而不是整条记录
MySQL automatic update for specific column instead of whole record
我有一个 table APPLEVARIETY。
它有以下列:
- 编号
- 家庭
- 颜色
- 描述(文本)
- description_last_update_time(时间戳)
对于后一列,我想使用 'ON UPDATE CURRENT_TIMESTAMP'。但是,如果 至少有一个其他列 被更新(id、family、color),这将导致时间戳被更新。
相反,我想指定如果 仅更新描述列,description_last_update_time 将获得 CURRENT_TIMESTAMP。它应该忽略其余列的更新。
我已经查看了 MySQL 手册,关于 Whosebug 的其他问题,当然也广泛使用了 google 但一无所获。
所以换句话说:有没有什么方法可以指定特定的列 ON UPDATE?有可能还是我走错了方向?
不,这不可能使用 ON UPDATE CURRENT_TIMESTAMP
这将在更新任何列时更新。
但是,您可以使用触发器实现相同的效果。为此,您首先需要从 table 定义中删除 ON UPDATE CURRENT_TIMESTAMP
。
触发器看起来像
delimiter //
create trigger APPLEVARIETY_update before update on APPLEVARIETY
for each row
begin
if new.description <> old.description then
set new.description_last_update_time = now();
end if;
end;//
delimiter ;
我有一个 table APPLEVARIETY。 它有以下列:
- 编号
- 家庭
- 颜色
- 描述(文本)
- description_last_update_time(时间戳)
对于后一列,我想使用 'ON UPDATE CURRENT_TIMESTAMP'。但是,如果 至少有一个其他列 被更新(id、family、color),这将导致时间戳被更新。
相反,我想指定如果 仅更新描述列,description_last_update_time 将获得 CURRENT_TIMESTAMP。它应该忽略其余列的更新。
我已经查看了 MySQL 手册,关于 Whosebug 的其他问题,当然也广泛使用了 google 但一无所获。
所以换句话说:有没有什么方法可以指定特定的列 ON UPDATE?有可能还是我走错了方向?
不,这不可能使用 ON UPDATE CURRENT_TIMESTAMP
这将在更新任何列时更新。
但是,您可以使用触发器实现相同的效果。为此,您首先需要从 table 定义中删除 ON UPDATE CURRENT_TIMESTAMP
。
触发器看起来像
delimiter //
create trigger APPLEVARIETY_update before update on APPLEVARIETY
for each row
begin
if new.description <> old.description then
set new.description_last_update_time = now();
end if;
end;//
delimiter ;