2015-08-29 27 views
2

是有辦法用predifined值會自動更新一個表中MySQL數據庫列的值和更新應該每月發生。每個月添加值的列在MySQL數據庫

的情況是,我想更新表中的員工將每月2.5天每個員工和天數的總量應復位每兩年爲每個員工列平衡。

+0

使用一種編程PHP,Python或其他語言的腳本來執行此操作,而不是存儲過程或觸發器事件。數據庫應該從業務邏輯中抽象出來。他們必須對應用程序不知情,以便存儲和保護關係數據。 – Parfait

回答

2

考慮使用MySQL的創建可以從需要做的cron作業帶走事件的策略。

DELIMITER $$ 
CREATE EVENT monthlyAddFlexDaysEvent 
ON SCHEDULE EVERY '1' MONTH 
STARTS '2015-09-01 00:00:00' 
DO 
BEGIN 
update empAccrued set daysAccrued=daysAccrued+2.5; 
END$$ 
DELIMITER ; 

DELIMITER $$ 
CREATE EVENT annualThingEvent 
ON SCHEDULE EVERY '1' YEAR 
STARTS '2016-01-01 00:00:00' 
DO 
BEGIN 
-- perform some annual thing 
END$$ 
DELIMITER ; 

在幾乎你可以做一些事情,不屬於上說,今年第一無論如何。例如,根據員工週年日期處理更新的每週事件。

從上CREATE EVENT的手冊頁,

interval: 
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | 
       WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | 
       DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND 

正確設置事件發生,甚至和監控它們是非常重要的。

show variables where variable_name='event_scheduler'; 
+-----------------+-------+ 
| Variable_name | Value | 
+-----------------+-------+ 
| event_scheduler | OFF | 
+-----------------+-------+ 

ooops,事件調度程序未打開。

嗯,我可以等待一整天,事件甚至沒有打開

SET GLOBAL event_scheduler = ON; -- turn her on 

show variables where variable_name='event_scheduler'; 
+-----------------+-------+ 
| Variable_name | Value | 
+-----------------+-------+ 
| event_scheduler | ON | 
+-----------------+-------+ 

列出所有事件的架構名稱:

show events from so_gibberish; 

show events\G; -- <--------- I like this one from mysql> prompt 
show events; -- <--------- from workbench/sqlyog 


*************************** 1. row *************************** 
        Db: so_gibberish 
       Name: set_trips_finished 
      Definer: [email protected] 
      Time zone: SYSTEM 
       Type: RECURRING 
      Execute at: NULL 
     Interval value: 1 
     Interval field: MINUTE 
       Starts: 2015-08-23 00:00:00 
       Ends: NULL 
       Status: ENABLED 
      Originator: 1 
character_set_client: utf8 
collation_connection: utf8_general_ci 
    Database Collation: utf8_general_ci 
+0

@德魯謝謝你的解釋,我想知道什麼是更好的,creatin cron工作或使用創建活動,如果我把我的應用程序關閉,我像兩個月後啓動它,cron會更新兩個月的值嗎?我真的很困惑 – Moez

+0

如果你把什麼關掉? MySQL數據庫真的是問題。是否運行mysql,人們可以連接(包括cron),事件是否開啓或關閉,如我的答案。當你說app時,這意味着什麼,就像一個web服務器?無論如何,基本上我在這裏和答案中的這個小盒子裏說的是什麼。國際海事組織,任何你可以在不涉及crontab的情況下在數據庫中執行任何操作,都是甜蜜的 – Drew

+0

謝謝你把我放在正確的道路上,我對我要做的事情有清晰的認識:) – Moez

3

數據庫真的不這樣的。它們用於存儲信息。所以如果你更新行或插入,然後一個事件發生,但其他然後,該數據不會改變

像這樣的東西應該在應用邏輯來處理,你可以寫觸發器。科瑞cron或其他週期性工作,將搶X日期創建的行和更新他們

+0

是否可以使用Create Event語句? – Moez

+0

我會做一個研究,我認爲這將解決問題 – Moez

相關問題