是有辦法用predifined值會自動更新一個表中MySQL數據庫列的值和更新應該每月發生。每個月添加值的列在MySQL數據庫
的情況是,我想更新表中的員工將每月2.5天每個員工和天數的總量應復位每兩年爲每個員工列平衡。
是有辦法用predifined值會自動更新一個表中MySQL數據庫列的值和更新應該每月發生。每個月添加值的列在MySQL數據庫
的情況是,我想更新表中的員工將每月2.5天每個員工和天數的總量應復位每兩年爲每個員工列平衡。
考慮使用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
@德魯謝謝你的解釋,我想知道什麼是更好的,creatin cron工作或使用創建活動,如果我把我的應用程序關閉,我像兩個月後啓動它,cron會更新兩個月的值嗎?我真的很困惑 – Moez
如果你把什麼關掉? MySQL數據庫真的是問題。是否運行mysql,人們可以連接(包括cron),事件是否開啓或關閉,如我的答案。當你說app時,這意味着什麼,就像一個web服務器?無論如何,基本上我在這裏和答案中的這個小盒子裏說的是什麼。國際海事組織,任何你可以在不涉及crontab的情況下在數據庫中執行任何操作,都是甜蜜的 – Drew
謝謝你把我放在正確的道路上,我對我要做的事情有清晰的認識:) – Moez
使用一種編程PHP,Python或其他語言的腳本來執行此操作,而不是存儲過程或觸發器事件。數據庫應該從業務邏輯中抽象出來。他們必須對應用程序不知情,以便存儲和保護關係數據。 – Parfait