文章目录
- 场景设计
- 场景描述:公司员工管理系统
- 需求
- 1. 创建数据库和表
- 2. 插入测试数据
- 3. 复杂存储过程
- 4. 调用存储过程
- 5. 结果示例
- 6. 细节优化
- 存储过程总结
- 7. 自动定期执行存储过程
- 7.1 启用 MySQL 事件调度器
- 7.2 创建定时任务(每天凌晨 2 点自动执行)
- 7.3 查看和管理事件
- 1️⃣ 查看当前所有事件
- 2️⃣ 修改事件
- 3️⃣ 禁用/启用事件
- 4️⃣ 删除事件
- 8. 结果与总结
场景设计
场景描述:公司员工管理系统
公司需要管理员工的晋升和调薪,要求如下:
- 员工表 (
employees
) 记录员工的基本信息、工资、入职时间、部门等。 - 薪资历史表 (
salary_history
) 记录员工的薪资变更情况。 - 晋升记录表 (
promotion_history
) 记录员工的晋升情况。
需求
- 定期评估员工,符合晋升条件的自动晋升并加薪:
- 入职 满2年 且 当前职位不是最高级 的员工,有50% 概率晋升。
- 晋升后工资增加 15%-25%(随机)。
- 晋升失败但工作满3年,工资 上涨 10%。
- 所有变更都需记录在历史表中。
- 使用动态 SQL 以支持不同部门的不同晋升规则。
1. 创建数据库和表
CREATE DATABASE IF NOT EXISTS company_db;
USE company_db;-- 部门表
CREATE TABLE departments (dept_id INT AUTO_INCREMENT PRIMARY KEY,dept_name VARCHAR(50) UNIQUE NOT NULL
);-- 员工表
CREATE TABLE employees (emp_id INT AUTO_INCREMENT PRIMARY KEY,emp_name VARCHAR(50) NOT NULL,dept_id INT,position VARCHAR(50),salary DECIMAL(10,2),hire_date DATE,FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);-- 薪资历史表
CREATE TABLE salary_history (record_id INT AUTO_INCREMENT PRIMARY KEY,emp_id INT,old_salary DECIMAL(10,2),new_salary DECIMAL(10,2),change_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (emp_id) REFERENCES employees(emp_id)
);-- 晋升历史表
CREATE TABLE promotion_history (record_id INT AUTO_INCREMENT PRIMARY KEY,emp_id INT,old_position VARCHAR(50),new_position VARCHAR(50),promotion_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (emp_id) REFERENCES employees(emp_id