在MySQL或其他数据库中是否有任何内置的cron替代品?

时间:2013-04-24 15:38:37

标签: mysql database database-design

这是我要问的非常基本的。

想象一下用户表中的日期列。

Username --- RegistrationDate ----- Authority
user1     -  (today's date)     -   1
user2     -  (yesterday's date) -   1

每个用户必须在10天后自动升级到Authority = 2

我知道我可以通过CRON不断执行它来实现这一点,但是数据库的内置功能呢?

类似的东西:

//pseudo code
bind trigger on users.RegistrationDate, function() {
       if(RegistrationDate >= RegistrationDate+10 days)
           return updateAuthority(1)
}

关于这一点的一个重要事项是表现。它不应该检查循环中的每个触发器,应该通过直接将它们绑定到列上来触发应该触发的任何触发器。

第二个重要的是,当我备份数据库时应该导出它。我不想重新创建它们。

我不是数据库的专家,但我在这个项目中使用MySQL,并且需要MySQL的类似功能。如果它不存在并且我必须继续使用cron,请告诉我Oracle / MSSQL或PostgreSQL中是否存在类似的功能,以便我可以移植我的数据库? (哦,还有MongoDB,它也可能是另一种选择。)

谢谢。

3 个答案:

答案 0 :(得分:4)

在MySQL中你有活动: http://dev.mysql.com/doc/refman/5.5/en/create-event.html

只需创建一个每天触发的事件并更新权限。

编辑:(回答以下问题)

我确定向导会导出事件,但如果没有,则可以使用mysqldump程序(它位于bin目录中)。您还可以使用SHOW CREATE EVENT命令导出单个事件:它返回重新创建事件所需的SQL命令。

答案 1 :(得分:1)

Sql Server具有Sql Server Agent。这是一个在指定时间运行作业的进程。作业由步骤构成,一步可以是Sql Query,SSIS包,也可以是执行程序等。

http://msdn.microsoft.com/en-us/library/ms189237.aspx

答案 2 :(得分:0)

Oracle有dbms_scheduler(不推荐使用dbms_job)。

功能包括

  • 自定义时间表(例如,每隔5分钟,每周一至周五18:00,......)
  • 工作链(工作之间的依赖关系)
  • 随意停用/启用工作
  • 以交互方式运行作业(主要用于调试目的)

示例(每天22:00运行系统监控):

 begin
      dbms_scheduler.create_job(
      job_name => 'JOB_SYSTEM_MONITORING'
     ,job_type => 'PLSQL_BLOCK'
     ,job_action => 'begin my_schema.system_monitoring.checkAndSendEMails; end; '
     ,start_date => to_date('2013-04-29 04:00:00', 'YYYY-MM-DD hh24:mi:ss')
     ,repeat_interval => 'FREQ=DAILY;BYHOUR=22'
     ,enabled => TRUE
     ,comments => 'System monitoring (daily job, runs at 22:00.');
   end;