Cloudflare D1 数据库任务表(tasks) 的 SQL 创建命令

5/29/2025

以下是针对你的需求设计的 Cloudflare D1 数据库任务表(tasks 的 SQL 创建命令。该表支持区分任务类型(待办、提醒、定时执行 JS)、执行频率(每日/指定日期)、脚本内容存储等功能,并包含常用字段(如状态、时间戳等)。


# SQL 创建命令

CREATE TABLE tasks (
    id TEXT PRIMARY KEY,  -- 唯一标识符(建议使用 UUID)
    type TEXT NOT NULL,   -- 任务类型(todo/reminder/scheduled_js)
    title TEXT NOT NULL,  -- 任务标题
    description TEXT,     -- 任务描述
    frequency_type TEXT NOT NULL,  -- 执行频率(daily/specific_date/cron)
    specific_date DATETIME,        -- 指定日期(仅当 frequency_type = 'specific_date' 时有效)
    cron_expression TEXT,          -- Cron 表达式(仅当 frequency_type = 'cron' 时有效)
    next_run_at DATETIME,          -- 下一次执行时间
    script TEXT,                   -- 存储 JS 脚本内容(仅当 type = 'scheduled_js' 时有效)
    status TEXT NOT NULL DEFAULT 'pending',  -- 任务状态(pending/completed/failed)
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,  -- 创建时间
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP   -- 最后更新时间
);

# 字段说明

字段名 类型 说明
id TEXT 主键,唯一标识任务(建议使用 UUID 生成)。
type TEXT 任务类型,支持 todo(待办)、reminder(提醒)、scheduled_js(定时执行 JS)。
title TEXT 任务标题(必填)。
description TEXT 任务描述(可选)。
frequency_type TEXT 执行频率类型:
daily(每日)
specific_date(指定日期)
cron(Cron 表达式)。
specific_date DATETIME 指定执行的日期(仅当 frequency_type = 'specific_date' 时有效)。
cron_expression TEXT Cron 表达式(仅当 frequency_type = 'cron' 时有效)。
next_run_at DATETIME 下一次执行时间(用于调度系统查询待执行任务)。
script TEXT 存储 JS 脚本内容(仅当 type = 'scheduled_js' 时有效)。
status TEXT 任务状态,默认 pending,可更新为 completedfailed
created_at DATETIME 创建时间(自动生成)。
updated_at DATETIME 最后更新时间(自动生成)。

# 示例数据

# 1. 普通待办任务

INSERT INTO tasks (
    id, type, title, description, frequency_type, status
) VALUES (
    'uuid-1234', 'todo', '完成项目报告', '提交给客户', 'daily', 'pending'
);

# 2. 定时执行 JS 脚本

INSERT INTO tasks (
    id, type, title, script, frequency_type, cron_expression, status
) VALUES (
    'uuid-5678', 'scheduled_js', '清理日志', 'console.log("清理完成");', 'cron', '0 0 * * *', 'pending'
);

# 3. 指定日期提醒

INSERT INTO tasks (
    id, type, title, frequency_type, specific_date, status
) VALUES (
    'uuid-90ab', 'reminder', '生日提醒', 'specific_date', '2024-12-25T08:00:00Z', 'pending'
);

# 扩展建议

  1. 索引优化
    next_run_at 字段添加索引,加速查询待执行任务:

    CREATE INDEX idx_next_run_at ON tasks (next_run_at);
    
  2. 约束校验
    通过应用层或触发器确保字段逻辑正确(例如:specific_date 仅在 frequency_type = 'specific_date' 时存在)。

  3. 时间戳自动更新
    如果 D1 支持触发器,可通过以下语句自动更新 updated_at

    CREATE TRIGGER update_tasks_updated_at
    AFTER UPDATE ON tasks
    FOR EACH ROW
    BEGIN
        UPDATE tasks SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
    END;
    

# 使用场景

  • 待办任务(Todo):记录用户需要手动完成的事项,支持每日重复。
  • 提醒(Reminder):指定日期触发的通知(如生日、会议)。
  • 定时 JS 脚本:通过 Cloudflare Workers 调度执行,例如清理缓存、数据同步等。

如果有其他需求(如多用户支持、任务分类),可以进一步扩展表结构! 🚀