【问题标题】:Increment a column yearly in MYSQL在MYSQL中每年增加一列
【发布时间】:2017-05-02 07:28:20
【问题描述】:

我的数据库有以下架构:

faculty(fid,fname,date of joining, salary, specialisation)
course(cid,cname,credits,semester, department)
teaches(fid,cid)

我想实现以下内容:

教师工资每年增加2000,起薪可能是100000。

我在考虑如何实现它,因为它是一个触发器,但这只是在插入时(之前/之后),那么我该如何实现呢?

请帮忙

【问题讨论】:

  • 你在使用 PHP,如果是,那么尝试通过 cron 作业来完成
  • 您需要创建一个调整表,以确保您不会执行两次调整。没有什么比存在问题但没有内置审计跟踪的模式更糟糕的了。为此,可以将特定年份的工资记录为个人记录,或者在辅助表中记录工资增长,以教职员工 ID 和年份为关键字。
  • 如果所有员工都在同一日期加入,那么手动运行是可以的,并且以后不会有员工进入数据库表。使用 MySQL 事件并每天自动运行它。它就像一个魅力。 MySQL 中最好的功能

标签: mysql triggers phpmyadmin


【解决方案1】:

我会使用 MySQL 事件和计划在您选择的预定义时间每天运行它(因为不同的员工可能有不同的加入日期)使用 mysql 调度程序(默认情况下未启用,您需要使用event_scheduler=ON 在配置文件中)。

在这种情况下,您可以编写一个简单的更新 SQL 查询来检查加入日期,如果当前日期大于加入日期 + 一年,则更新薪水 (salary = salary + 2000)。现在您可能需要另一个日期字段“salary last updated”,然后在更新查询中,您将检查当前时间戳是否大于薪水的上次更新,并且从那以后没有过去一年。如果无法添加新字段,并且每个人的年度增量一致且相同,您可以通过 (current salary- base year salary)/increment 金额来查看今年是否已经应用了增量,以查看当年应用了多少增量- 加入年份的日期。

https://dev.mysql.com/doc/refman/5.7/en/events-overview.html 了解有关 MySQL 预定事件的更多信息。

启用事件调度器后,您可以像这样添加事件

CREATE EVENT `UpdateSalaryEvent` 
ON SCHEDULE EVERY 1 DAY STARTS '2017-05-15 03:00:00' 
DO BEGIN
    -- event body   YOUR SALARY UPDATE SQL GOES HERE
END;

【讨论】:

  • 很简单,只要把 event_scheduler =ON 放到 .cnf 文件中,然后重启服务器。如果您不想立即重新启动服务器,您可以在工作台中运行 set glabal event_scheduler=ON。之后,您所要做的就是创建一个事件并在其中添加一条 SQL 语句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 2020-12-30
  • 2022-01-20
  • 1970-01-01
相关资源
最近更新 更多