You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建SQL事件,每5分钟更新ID1-100内不重复的随机连续行?

实现随机不重复连续ID范围的SQL事件方案

1. 创建辅助记录表

首先需要创建一张表,用来跟踪已经更新过的ID区间,避免重复更新:

CREATE TABLE updated_ranges (
    id INT AUTO_INCREMENT PRIMARY KEY,
    start_id INT NOT NULL,
    end_id INT NOT NULL,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY idx_start_end (start_id, end_id)
);

2. 编写更新逻辑的存储过程

将更新逻辑封装为存储过程,核心是随机选出未被覆盖的连续n个ID(示例中n设为10,可按需调整):

DELIMITER //
CREATE PROCEDURE update_random_continuous_rows()
BEGIN
    DECLARE target_start INT;
    DECLARE n INT DEFAULT 10; -- 每次更新的行数,可自定义
    DECLARE max_id INT DEFAULT 100; -- ID上限值

    -- 随机生成起始ID,确保区间不超出1-100范围
    SELECT FLOOR(RAND() * (max_id - n + 1)) + 1 INTO target_start;

    -- 检查区间是否已被更新,若已占用则重新选择(最多尝试10次避免死循环)
    SET @attempts = 0;
    WHILE EXISTS (
        SELECT 1 FROM updated_ranges
        WHERE (start_id <= target_start AND end_id >= target_start)
        OR (start_id <= target_start + n - 1 AND end_id >= target_start + n - 1)
        OR (target_start <= start_id AND target_start + n - 1 >= end_id)
    ) AND @attempts < 10 DO
        SELECT FLOOR(RAND() * (max_id - n + 1)) + 1 INTO target_start;
        SET @attempts = @attempts + 1;
    END WHILE;

    -- 找到有效区间后,执行更新并记录到辅助表
    IF @attempts < 10 THEN
        UPDATE your_table -- 替换为你的实际表名
        SET timer = CURRENT_TIMESTAMP - INTERVAL FLOOR(RAND() * 245) SECOND
        WHERE id BETWEEN target_start AND target_start + n - 1;

        INSERT INTO updated_ranges (start_id, end_id)
        VALUES (target_start, target_start + n - 1);
    END IF;
END //
DELIMITER ;

3. 创建定时事件

设置每5分钟调用一次存储过程:

CREATE EVENT IF NOT EXISTS update_continuous_rows_event
ON SCHEDULE EVERY 5 MINUTE
STARTS CURRENT_TIMESTAMP
DO
CALL update_random_continuous_rows();

注意事项

  • 替换代码中的your_table为你实际要更新的表名
  • 若1-100范围内的所有连续n行都已被更新,存储过程会停止执行,可按需添加重置辅助表或循环更新的逻辑
  • 确保MySQL服务器已开启事件调度器,可通过SET GLOBAL event_scheduler = ON;开启

内容的提问来源于stack exchange,提问作者Max Njoroge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:42:15