MySQL写一个定时任务:每天凌晨两点从新增客户表中在统计表中插入每个部门每个员工昨天的新增客户数
时间: 2023-05-29 16:04:06 浏览: 120
数据库定时任务
首先,需要创建两张表:新增客户表和统计表。
新增客户表:
```
CREATE TABLE `new_customer` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`department` varchar(50) NOT NULL,
`employee` varchar(50) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
统计表:
```
CREATE TABLE `customer_count` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`department` varchar(50) NOT NULL,
`employee` varchar(50) NOT NULL,
`date` date NOT NULL,
`count` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
然后,编写定时任务的SQL语句:
```
INSERT INTO customer_count (department, employee, date, count)
SELECT department, employee, DATE_SUB(CURDATE(), INTERVAL 1 DAY), COUNT(*)
FROM new_customer
WHERE date = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY department, employee;
```
该定时任务会在每天凌晨两点执行,从新增客户表中筛选出昨天的新增客户记录,并统计每个部门每个员工的新增客户数,然后插入到统计表中。
在MySQL中,可以通过创建事件来实现定时任务的自动执行。具体步骤如下:
1. 打开MySQL客户端,并连接到数据库。
2. 创建事件:
```
CREATE EVENT `customer_count_event`
ON SCHEDULE EVERY 1 DAY
STARTS '2022-01-01 02:00:00'
DO
INSERT INTO customer_count (department, employee, date, count)
SELECT department, employee, DATE_SUB(CURDATE(), INTERVAL 1 DAY), COUNT(*)
FROM new_customer
WHERE date = DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY department, employee;
```
该事件设置为每天执行一次,从2022年1月1日凌晨两点开始执行,执行的SQL语句和上面的一样。
3. 启用事件调度器:
```
SET GLOBAL event_scheduler = ON;
```
启用事件调度器后,MySQL会自动执行定时任务。如果需要停止事件调度器,可以使用以下命令:
```
SET GLOBAL event_scheduler = OFF;
```
注意:创建事件需要具有SUPER权限。如果当前用户没有SUPER权限,可以使用以下命令授权:
```
GRANT EVENT ON *.* TO 'username'@'localhost';
```
阅读全文