这是我要问的非常基本的。
想象一下用户表中的日期列。
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,它也可能是另一种选择。)
谢谢。
答案 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包,也可以是执行程序等。
答案 2 :(得分:0)
Oracle有dbms_scheduler(不推荐使用dbms_job)。
功能包括
示例(每天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;