2

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

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

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

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

我知道我可以通过使用 CRON 不断执行 PHP 来做到这一点,但是数据库的内置功能呢?

就像是:

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

一个重要的事情是性能。它不应该检查循环中的每个触发器,应该通过将它们直接绑定在列上来及时触发任何应该触发的内容。

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

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

谢谢你。

4

3 回答 3

4

在 MySQL 你有事件: http ://dev.mysql.com/doc/refman/5.5/en/create-event.html

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

编辑:(回答下面的问题)

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

于 2013-04-24T16:16:34.620 回答
1

Sql Server 有 Sql Server 代理。这是一个在指定时间运行作业的进程。Jobs由step组成,step可以是Sql Query,也可以是SSIS包,也可以是执行程序等等。

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

于 2013-04-24T15:41:39.617 回答
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;
于 2013-04-29T14:42:12.573 回答