文章目錄
- 場景設計
- 場景描述:公司員工管理系統
- 需求
- 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