如何在x小时后自动更改一个值?

时间:2017-04-09 13:20:05

标签: mysql

我目前正致力于学校项目的禁止/取消功能。我有一个带有一个is_banned列的User表。每当我执行一个更新查询以将状态从unbanned更改为banned时,我想传递一个值,该值包含用户被禁止的时间。我们说24小时。事情是我想在那之后自动取消他。这可能吗?

1 个答案:

答案 0 :(得分:1)

嗯,禁止可能不常见,所以你可以使用事件。当某人被禁止时,请创建一个事件以解除该人的责任。

我仍然不喜欢这个主意。当unban作业应该运行时,数据库可能会发生故障。用户可能会再次被禁止,延长禁令期。

我认为更好的方法是在表格中添加一个列(例如users)并使用最近的禁令时间。然后创建一个视图以获取未被禁用的用户:

create view v_users as
    select u.*
    from users u
    where u.bantime is null or u.bantime < now() - interval 24 hour;

关键是每当您的代码想要未经禁止的用户时使用此视图。

或者,如果你只想要一面旗帜:

create view v_users as
    select u.*, (u.bantime > now() - interval 24 hour) as isBanned
    from users u;