mysql写一个存储过程:每一年1月1日3:00,清理5年前的订单数据。
时间: 2024-03-15 16:44:12 浏览: 35
好的,以下是存储过程的代码实现:
```
DELIMITER $$
CREATE PROCEDURE clear_order_data()
BEGIN
DECLARE current_year INT;
DECLARE delete_year INT;
SELECT YEAR(NOW()) INTO current_year;
SET delete_year = current_year - 5;
DELETE FROM orders WHERE YEAR(order_date) <= delete_year;
END $$
DELIMITER ;
```
解释一下代码:
- `DELIMITER $$`:设置分隔符为 `$$`,以避免在存储过程中使用分号时与 SQL 语句的分号冲突。
- `CREATE PROCEDURE clear_order_data()`:创建一个名为 `clear_order_data` 的存储过程。
- `DECLARE current_year INT` 和 `DECLARE delete_year INT`:声明两个整型变量,分别用于存储当前年份和要删除的订单的年份。
- `SELECT YEAR(NOW()) INTO current_year`:查询当前年份,并将其存储到 `current_year` 变量中。
- `SET delete_year = current_year - 5`:计算要删除的订单的年份,并将其存储到 `delete_year` 变量中。
- `DELETE FROM orders WHERE YEAR(order_date) <= delete_year`:删除订单表中年份小于等于 `delete_year` 的数据。
- `END $$`:结束存储过程的定义,并将分隔符设置回分号。
最后,你可以在每年的1月1日3:00执行该存储过程,以清理过期的订单数据。