×
¥
查看详情
🔥 会员专享 文生文 开发

数据库查询生成专家

👁️ 108 次查看
📅 Dec 1, 2025
💡 核心价值: 本提示词专为后端开发场景设计,能够根据用户的具体需求生成精准、高效的SQL查询语句。通过明确的任务拆解和参数化设计,支持多种数据库操作类型,包括数据查询、更新、删除等。该提示词确保生成的SQL语句符合技术规范,语法正确且执行效率高,同时提供清晰的代码注释和逻辑说明,帮助开发人员快速理解和应用生成的查询语句,提升后端开发效率和数据操作准确性。

🎯 可自定义参数(4个)

操作描述
需要执行的数据库操作的具体描述
目标数据表
需要操作的主要数据库表名称
查询条件
查询的过滤条件和限制条件
排序要求
结果集的排序规则和要求

🎨 效果示例

SQL查询语句

-- 可复用视图:抽取“有效订单”基础集(已支付、未取消、非测试、金额>0)
CREATE VIEW v_orders_valid AS
SELECT
  id,
  shop_id,
  shop_name,          -- 若shop_name不在orders表,请在最终查询中改为JOIN店铺表
  payment_time,
  order_amount
FROM orders
WHERE status = 'paid'
  AND cancelled = FALSE
  AND COALESCE(is_test, FALSE) = FALSE
  AND order_amount > 0;


-- 本月店铺-日期维度成交额与订单数(以支付时间为准),可选按店铺ID列表过滤
-- 使用参数::month_start_date(本月起始00:00:00),:next_month_start_date(下月起始00:00:00),:shop_ids(可选)
SELECT
  o.shop_id,
  o.shop_name,
  CAST(o.payment_time AS DATE) AS order_date,
  COUNT(*) AS order_count,
  SUM(o.order_amount) AS gross_amount,
  AVG(o.order_amount) AS avg_order_value
FROM v_orders_valid AS o
WHERE o.payment_time >= :month_start_date
  AND o.payment_time <  :next_month_start_date
  -- 可选店铺过滤(请以安全的参数绑定方式传入列表)
  AND (
    :shop_ids IS NULL
    OR o.shop_id IN (:shop_ids)
  )
GROUP BY
  o.shop_id,
  o.shop_name,
  CAST(o.payment_time AS DATE)
ORDER BY
  order_date ASC,
  o.shop_id ASC,
  gross_amount DESC,   -- 金额相同时按订单数降序作为最后的并列打破条件
  order_count DESC;


-- 若不使用视图,等价的单条查询(完全展开条件)
SELECT
  o.shop_id,
  o.shop_name,
  CAST(o.payment_time AS DATE) AS order_date,
  COUNT(*) AS order_count,
  SUM(o.order_amount) AS gross_amount,
  AVG(o.order_amount) AS avg_order_value
FROM orders AS o
WHERE o.status = 'paid'
  AND o.cancelled = FALSE
  AND COALESCE(o.is_test, FALSE) = FALSE
  AND o.order_amount > 0
  AND o.payment_time >= :month_start_date
  AND o.payment_time <  :next_month_start_date
  AND (
    :shop_ids IS NULL
    OR o.shop_id IN (:shop_ids)
  )
GROUP BY
  o.shop_id,
  o.shop_name,
  CAST(o.payment_time AS DATE)
ORDER BY
  order_date ASC,
  o.shop_id ASC,
  gross_amount DESC,
  order_count DESC;

语句说明

  • 操作类型:查询(聚合统计)
  • 涉及表名:orders(以及复用视图 v_orders_valid)
  • 主要功能:
    • 统计本月内(以支付时间 payment_time 为准)的有效订单(已支付、未取消、非测试、金额>0),按店铺ID与日期维度输出:
      • 店铺ID、店铺名、日期
      • 订单数(order_count)、成交额(gross_amount)、平均客单价(avg_order_value = AVG(order_amount))
    • 支持按店铺ID列表进行可选过滤
  • 排序要求:
    • 日期升序,其次店铺ID升序
    • 为满足“金额相同按订单数降序”的并列打破条件,增加 gross_amount DESC、order_count DESC 作为后续排序键
  • 性能提示:
    • 使用时间范围谓词 payment_time >= :month_start_date AND payment_time < :next_month_start_date,保证可命中有序索引并避免函数包裹列导致不可索引(CAST 仅用于分组字段不会影响过滤谓词的可索引性)。
    • 将等值过滤列置于复合索引前缀(status、cancelled、is_test),时间列作为后续列,有助于缩小扫描范围。
    • 如 shop_name 不在 orders 表而在 shops 表,请以 JOIN shops 获取店铺名,并确保 shops(shop_id) 有主键/唯一索引。

参数说明

  • :month_start_date:本月第一天 00:00:00(例如 2025-12-01 00:00:00)
  • :next_month_start_date:下月第一天 00:00:00(例如 2026-01-01 00:00:00),用于构造左闭右开时间区间
  • :shop_ids:可选的店铺ID列表参数(请使用安全的数组/批量绑定,不要拼接字符串)
  • 列定义假设:
    • status:订单状态,文本类型,需等于 'paid'
    • cancelled:布尔/数值型取消标记,未取消为 FALSE 或 0
    • is_test:布尔/数值型测试标记,测试订单需过滤(FALSE 或 0)
    • order_amount:数值型订单金额,需 > 0
    • payment_time:时间戳(以此为统计口径)
    • shop_id:店铺ID
    • shop_name:店铺名(若不在 orders,请在查询中 JOIN 店铺表)

使用示例

  • 参数示例(应用层计算并绑定):

    • :month_start_date = '2025-12-01 00:00:00'
    • :next_month_start_date = '2026-01-01 00:00:00'
    • :shop_ids = [101, 102, 205] 或留空(NULL)表示不过滤店铺
  • 样例调用逻辑:

    1. 计算本月起止:
      • month_start = date_trunc_to_month(now) 的 00:00:00
      • next_month_start = add_months(month_start, 1)
    2. 安全绑定上述两个时间参数与可选的 shop_ids 列表参数
    3. 执行主查询并读取汇总结果
  • 若需要从店铺表取店铺名(shop_name 不在 orders):

SELECT
  o.shop_id,
  s.shop_name,
  CAST(o.payment_time AS DATE) AS order_date,
  COUNT(*) AS order_count,
  SUM(o.order_amount) AS gross_amount,
  AVG(o.order_amount) AS avg_order_value
FROM orders AS o
JOIN shops AS s ON s.shop_id = o.shop_id
WHERE o.status = 'paid'
  AND o.cancelled = FALSE
  AND COALESCE(o.is_test, FALSE) = FALSE
  AND o.order_amount > 0
  AND o.payment_time >= :month_start_date
  AND o.payment_time <  :next_month_start_date
  AND (
    :shop_ids IS NULL
    OR o.shop_id IN (:shop_ids)
  )
GROUP BY
  o.shop_id,
  s.shop_name,
  CAST(o.payment_time AS DATE)
ORDER BY
  order_date ASC,
  o.shop_id ASC,
  gross_amount DESC,
  order_count DESC;

索引建议

  • 为高选择性过滤与时间范围扫描建立复合索引(通用DDL,不使用数据库特有语法):
-- 过滤列 + 时间列的复合索引
CREATE INDEX idx_orders_paid_active_month
  ON orders (status, cancelled, is_test, payment_time);

-- 按店铺与时间的聚合/过滤支持(便于按店铺ID列表过滤以及分组)
CREATE INDEX idx_orders_shop_time
  ON orders (shop_id, payment_time);

-- 若频繁按 payment_time 分区扫描(不按店铺过滤),可增加时间单列索引
CREATE INDEX idx_orders_payment_time
  ON orders (payment_time);
  • 说明:
    • 等值谓词列(status、cancelled、is_test)置于索引前缀,可迅速定位有效订单子集;payment_time 作为后续列可用于范围扫描本月数据。
    • IN 列表过滤可利用 shop_id 前缀索引加速;与时间组合索引在本查询中也有助于分组/排序。
    • 请确保 orders 主键或唯一索引已存在(如 id),并避免在查询中对 payment_time 使用非SARG可优化的函数(过滤部分不对 payment_time 做函数处理已满足该点)。

SQL查询语句

-- 说明:
-- 1) 以下语句尽量采用标准SQL(SQL:1999/2008)写法,避免非标准方言;
-- 2) 请将主键列名 id、管理员/软删字段(示例中的 role/is_admin/deleted_at/is_deleted)替换为实际字段;
-- 3) :batch_size / :preview_rows / :sample_rows 为绑定参数(整数),用于控制批量与预览规模;
-- 4) 递归CTE用于将连续点号 .. 反复压缩为单个 .,直到无连续点号为止;
-- 5) 所有更新均限制在最近30天活跃(login_at)且需要修正的用户上,并排除管理员与软删除用户;
-- 6) 批处理按主键升序切分;预览按最近登录时间降序。

/* ========== 预览(按最近登录时间降序)========== */
WITH candidates AS (
  SELECT
    u.id,
    u.login_at,
    u.email AS email_before,
    /* 计算规范化后的邮箱:lower + trim + 折叠重复点号 */
    (
      WITH RECURSIVE s(e) AS (
        SELECT LOWER(TRIM(u.email))
        UNION ALL
        SELECT REPLACE(e, '..', '.')
        FROM s
        WHERE POSITION('..' IN e) > 0
      )
      SELECT e
      FROM s
      WHERE POSITION('..' IN e) = 0
      FETCH FIRST 1 ROW ONLY
    ) AS email_after,
    CASE WHEN u.email <> LOWER(u.email) THEN 1 ELSE 0 END AS has_uppercase,
    CASE WHEN u.email <> TRIM(u.email) THEN 1 ELSE 0 END AS has_trim_spaces,
    CASE WHEN POSITION('..' IN u.email) > 0 THEN 1 ELSE 0 END AS has_dup_dots
  FROM users u
  WHERE
    u.login_at >= CURRENT_DATE - INTERVAL '30' DAY
    AND u.email IS NOT NULL
    AND TRIM(u.email) <> ''
    AND (
      u.email <> LOWER(u.email)           -- 存在大写
      OR u.email <> TRIM(u.email)         -- 首尾空格
      OR POSITION('..' IN u.email) > 0    -- 连续点号
    )
    /* 管理员排除(按实际字段择一使用) */
    AND (u.role IS NULL OR u.role <> 'admin')
    AND COALESCE(u.is_admin, 0) = 0
    /* 软删除排除(按实际字段择一使用) */
    AND u.deleted_at IS NULL
    AND COALESCE(u.is_deleted, 0) = 0
)
SELECT
  id,
  login_at,
  email_before,
  email_after,
  has_uppercase,
  has_trim_spaces,
  has_dup_dots
FROM candidates
ORDER BY login_at DESC
FETCH FIRST :preview_rows ROWS ONLY;


/* ========== 事务方案(可回滚)========== */
START TRANSACTION;

-- 1) 统计本批将影响的行数(按主键批处理,避免长事务)
WITH candidates AS (
  SELECT
    u.id,
    u.email AS email_before,
    (
      WITH RECURSIVE s(e) AS (
        SELECT LOWER(TRIM(u.email))
        UNION ALL
        SELECT REPLACE(e, '..', '.')
        FROM s
        WHERE POSITION('..' IN e) > 0
      )
      SELECT e
      FROM s
      WHERE POSITION('..' IN e) = 0
      FETCH FIRST 1 ROW ONLY
    ) AS email_after
  FROM users u
  WHERE
    u.login_at >= CURRENT_DATE - INTERVAL '30' DAY
    AND u.email IS NOT NULL
    AND TRIM(u.email) <> ''
    AND (
      u.email <> LOWER(u.email)
      OR u.email <> TRIM(u.email)
      OR POSITION('..' IN u.email) > 0
    )
    AND (u.role IS NULL OR u.role <> 'admin')
    AND COALESCE(u.is_admin, 0) = 0
    AND u.deleted_at IS NULL
    AND COALESCE(u.is_deleted, 0) = 0
),
to_update AS (
  SELECT id, email_before, email_after
  FROM candidates
  WHERE email_before <> email_after
),
batch AS (
  SELECT *
  FROM to_update
  ORDER BY id
  FETCH FIRST :batch_size ROWS ONLY
)
SELECT COUNT(*) AS affected_rows
FROM batch;

-- 2) 示例前后差异(取本批中的若干行)
WITH candidates AS (
  SELECT
    u.id,
    u.email AS email_before,
    (
      WITH RECURSIVE s(e) AS (
        SELECT LOWER(TRIM(u.email))
        UNION ALL
        SELECT REPLACE(e, '..', '.')
        FROM s
        WHERE POSITION('..' IN e) > 0
      )
      SELECT e
      FROM s
      WHERE POSITION('..' IN e) = 0
      FETCH FIRST 1 ROW ONLY
    ) AS email_after
  FROM users u
  WHERE
    u.login_at >= CURRENT_DATE - INTERVAL '30' DAY
    AND u.email IS NOT NULL
    AND TRIM(u.email) <> ''
    AND (
      u.email <> LOWER(u.email)
      OR u.email <> TRIM(u.email)
      OR POSITION('..' IN u.email) > 0
    )
    AND (u.role IS NULL OR u.role <> 'admin')
    AND COALESCE(u.is_admin, 0) = 0
    AND u.deleted_at IS NULL
    AND COALESCE(u.is_deleted, 0) = 0
),
to_update AS (
  SELECT id, email_before, email_after
  FROM candidates
  WHERE email_before <> email_after
),
batch AS (
  SELECT *
  FROM to_update
  ORDER BY id
  FETCH FIRST :batch_size ROWS ONLY
)
SELECT
  id,
  email_before AS old_email,
  email_after  AS new_email
FROM batch
FETCH FIRST :sample_rows ROWS ONLY;

-- 3) 执行本批更新(按主键批处理)
WITH candidates AS (
  SELECT
    u.id,
    u.email AS email_before,
    (
      WITH RECURSIVE s(e) AS (
        SELECT LOWER(TRIM(u.email))
        UNION ALL
        SELECT REPLACE(e, '..', '.')
        FROM s
        WHERE POSITION('..' IN e) > 0
      )
      SELECT e
      FROM s
      WHERE POSITION('..' IN e) = 0
      FETCH FIRST 1 ROW ONLY
    ) AS email_after
  FROM users u
  WHERE
    u.login_at >= CURRENT_DATE - INTERVAL '30' DAY
    AND u.email IS NOT NULL
    AND TRIM(u.email) <> ''
    AND (
      u.email <> LOWER(u.email)
      OR u.email <> TRIM(u.email)
      OR POSITION('..' IN u.email) > 0
    )
    AND (u.role IS NULL OR u.role <> 'admin')
    AND COALESCE(u.is_admin, 0) = 0
    AND u.deleted_at IS NULL
    AND COALESCE(u.is_deleted, 0) = 0
),
to_update AS (
  SELECT id, email_before, email_after
  FROM candidates
  WHERE email_before <> email_after
),
batch AS (
  SELECT *
  FROM to_update
  ORDER BY id
  FETCH FIRST :batch_size ROWS ONLY
)
UPDATE users u
SET email = (SELECT b.email_after FROM batch b WHERE b.id = u.id)
WHERE EXISTS (SELECT 1 FROM batch b WHERE b.id = u.id);

-- 4) 若检查无误则提交,否则回滚
-- COMMIT;
-- ROLLBACK;

语句说明

  • 操作类型:更新(带预览与可回滚事务)
  • 涉及表名:users
  • 主要功能:
    • 仅对最近30天有登录记录的活跃用户,修正邮箱字段:
      • 统一转小写:LOWER(email)
      • 去除首尾空格:TRIM(email)
      • 清理重复点号:递归替换将 .. 压缩为 .
    • 排除管理员与已软删除用户
    • 仅处理确实会变更的记录(前后不同)
    • 按主键分批更新,避免长事务;提供预览与影响行数统计,可选择 COMMIT 或 ROLLBACK
  • 性能提示:
    • 建议索引:
      • 索引1:users(login_at) 覆盖最近30天过滤
      • 索引2:users(email) 支撑条件与更新列(如需去重检查/约束)
      • 索引3:users(id) 作为主键(用于批处理与更新匹配)
      • 过滤列(管理员与软删除)如常用:可建组合/单列索引 users(is_admin) / users(role) / users(is_deleted) / users(deleted_at)
    • 严格使用批处理(:batch_size)控制单次更新量,缩短行级锁持有时间,降低回滚成本
    • 递归CTE仅对本批数据执行,数据量可控时性能可接受;若有超大数据量,建议先离线计算新值或使用存储函数
    • 若 email 存在唯一约束,建议在预览阶段检查 email_after 是否重复,必要时分批或跳过会冲突的记录

参数说明

  • :batch_size:单次更新的最大行数(建议 200~2000,根据实例负载调整)
  • :preview_rows:预览列表返回的行数,按 login_at 降序(建议 20/50)
  • :sample_rows:在事务中返回示例前后差异的行数(建议 10/20)
  • login_at:最近活跃时间,过滤条件为 login_at >= CURRENT_DATE - INTERVAL '30' DAY
  • 管理员/软删除字段:
    • 管理员:示例使用 (role <> 'admin') 与 COALESCE(is_admin,0)=0,实际请选择其一或按实际字段调整
    • 软删除:示例使用 deleted_at IS NULL 与 COALESCE(is_deleted,0)=0,实际请选择其一或按实际字段调整
  • 主键:示例使用 id 作为主键进行批处理与匹配,请替换为实际主键列

使用示例

  • 预览(最近登录优先):设置 :preview_rows = 20,确认“before/after”及变更原因标记
  • 事务执行:
    1. START TRANSACTION;
    2. 将 :batch_size 设为 500,运行“1) 统计本批将影响的行数”确认数量
    3. 运行“2) 示例前后差异”核对样例
    4. 运行“3) 执行本批更新”
    5. 如无异常则 COMMIT;如发现问题则 ROLLBACK

备注与替代实现:

  • 如果目标数据库不支持递归CTE,可在小批场景用多层 REPLACE 近似折叠重复点号(性能更优但不完全严谨): REPLACE(REPLACE(REPLACE(REPLACE(LOWER(TRIM(email)), '..', '.'), '..', '.'), '..', '.'), '..', '.') 可按需要加深层数;但为确保正确性,优先使用递归CTE方案。
  • 如果需要预防更新后触发唯一键冲突,可在 to_update/batch 上先做聚合检测: SELECT email_after, COUNT() FROM batch GROUP BY email_after HAVING COUNT() > 1 并同时检查 email_after 是否已存在于 users 表中,必要时排除将冲突的 id 再执行更新。

SQL查询语句

-- 0) 影响范围预览(建议先按ID范围或时间窗口做预估,避免全表扫描)
-- 说明:如库中布尔类型不是TRUE/FALSE,请按实际取值替换(如 0/1 或 'N'/'Y')。
SELECT COUNT(*) AS candidate_total
FROM coupons c
WHERE c.deleted_at IS NULL
  AND c.is_system_reserved = FALSE
  AND c.expire_at < CURRENT_DATE
  AND (c.usage_count = 0 OR c.status = 'unused')
  AND EXISTS (
    SELECT 1
    FROM activities a
    WHERE a.id = c.activity_id
      AND (a.status IN ('ended','closed') OR a.end_time < CURRENT_TIMESTAMP)
  )
  -- 可选分段条件(强烈建议启用以避免锁表和大范围扫描)
  AND c.id BETWEEN :start_id AND :end_id;


-- 1) 分段选取本批次候选ID(按过期时间升序;同时间按创建时间升序,再按ID)
-- 注:FETCH FIRST 为标准SQL分页写法;若数据库不支持,请使用等效语法(如 MySQL/PG 使用 LIMIT)。
SELECT c.id
FROM coupons c
WHERE c.deleted_at IS NULL
  AND c.is_system_reserved = FALSE
  AND c.expire_at < CURRENT_DATE
  AND (c.usage_count = 0 OR c.status = 'unused')
  AND EXISTS (
    SELECT 1
    FROM activities a
    WHERE a.id = c.activity_id
      AND (a.status IN ('ended','closed') OR a.end_time < CURRENT_TIMESTAMP)
  )
  AND c.id BETWEEN :start_id AND :end_id
ORDER BY c.expire_at ASC, c.created_at ASC, c.id ASC
FETCH FIRST :batch_size ROWS ONLY;


-- 2) 记录审计日志(在同一事务中先插入审计再更新)
-- 说明:使用与更新同一条件确保审计与更新目标一致;batch_id 用于批次回滚与追踪。
INSERT INTO coupon_audit_logs (
  coupon_id,
  action,
  previous_status,
  previous_deleted_at,
  change_reason,
  changed_by,
  changed_at,
  batch_id
)
SELECT c.id,
       'soft_delete',
       c.status,
       c.deleted_at,
       :reason,
       :operator_id,
       CURRENT_TIMESTAMP,
       :batch_id
FROM coupons c
WHERE c.deleted_at IS NULL
  AND c.is_system_reserved = FALSE
  AND c.expire_at < CURRENT_DATE
  AND (c.usage_count = 0 OR c.status = 'unused')
  AND EXISTS (
    SELECT 1
    FROM activities a
    WHERE a.id = c.activity_id
      AND (a.status IN ('ended','closed') OR a.end_time < CURRENT_TIMESTAMP)
  )
  AND c.id BETWEEN :start_id AND :end_id;


-- 3) 执行软删除(设置 deleted_at、status、reason)
-- 说明:为避免重复处理,限定 deleted_at IS NULL;与审计条件一致。
UPDATE coupons c
SET c.deleted_at = CURRENT_TIMESTAMP,
    c.status     = 'inactive',
    c.reason     = :reason
WHERE c.deleted_at IS NULL
  AND c.is_system_reserved = FALSE
  AND c.expire_at < CURRENT_DATE
  AND (c.usage_count = 0 OR c.status = 'unused')
  AND EXISTS (
    SELECT 1
    FROM activities a
    WHERE a.id = c.activity_id
      AND (a.status IN ('ended','closed') OR a.end_time < CURRENT_TIMESTAMP)
  )
  AND c.id BETWEEN :start_id AND :end_id;


-- 4) 本批次影响统计(更新后基于审计日志)
-- 4.1 受影响总量
SELECT COUNT(*) AS affected_rows
FROM coupon_audit_logs
WHERE batch_id = :batch_id
  AND action = 'soft_delete';

-- 4.2 按活动分布的影响量(便于评估业务影响)
SELECT c.activity_id,
       COUNT(*) AS affected_per_activity
FROM coupons c
WHERE c.id IN (
  SELECT al.coupon_id
  FROM coupon_audit_logs al
  WHERE al.batch_id = :batch_id
    AND al.action = 'soft_delete'
)
GROUP BY c.activity_id
ORDER BY affected_per_activity DESC;


-- 5) 回滚指引(基于审计日志恢复之前状态;务必在单独事务中执行)
-- 5.1 执行回滚:恢复之前的 deleted_at、status;reason 写入回滚说明
UPDATE coupons c
SET c.deleted_at = (
      SELECT al.previous_deleted_at
      FROM coupon_audit_logs al
      WHERE al.coupon_id = c.id
        AND al.batch_id = :batch_id
        AND al.action = 'soft_delete'
    ),
    c.status = (
      SELECT al.previous_status
      FROM coupon_audit_logs al
      WHERE al.coupon_id = c.id
        AND al.batch_id = :batch_id
        AND al.action = 'soft_delete'
    ),
    c.reason = :rollback_reason
WHERE EXISTS (
  SELECT 1
  FROM coupon_audit_logs al
  WHERE al.coupon_id = c.id
    AND al.batch_id = :batch_id
    AND al.action = 'soft_delete'
);

-- 5.2 回滚动作审计(可选)
INSERT INTO coupon_audit_logs (
  coupon_id,
  action,
  previous_status,
  previous_deleted_at,
  change_reason,
  changed_by,
  changed_at,
  batch_id
)
SELECT c.id,
       'rollback_soft_delete',
       c.status,
       c.deleted_at,
       :rollback_reason,
       :operator_id,
       CURRENT_TIMESTAMP,
       :batch_id
FROM coupons c
WHERE EXISTS (
  SELECT 1
  FROM coupon_audit_logs al
  WHERE al.coupon_id = c.id
    AND al.batch_id = :batch_id
    AND al.action = 'soft_delete'
);

语句说明

  • 操作类型:更新(软删除)、审计记录、统计、回滚
  • 涉及表名:coupons、activities(活动表)、coupon_audit_logs(审计表)
  • 主要功能:
    • 根据条件选取已过期且未使用的、所属活动已结束或关闭的、且非系统保留的优惠券,分批进行软删除(设置 deleted_at、status=inactive、写入 reason)。
    • 软删除前写审计日志,确保可追溯与可回滚。
    • 提供影响范围统计(总量与按活动分布)。
    • 提供回滚指引,按 batch_id 恢复本批次变更。
  • 性能提示:
    • 强烈建议使用分段条件(ID范围或时间窗口)进行批处理,避免大事务与长时间锁。
    • 为避免全表扫描,请确保以下索引:
      • coupons(idx_expire_status_usage_reserved): (expire_at, status, usage_count, is_system_reserved, deleted_at)
      • coupons(idx_activity_id): (activity_id)
      • coupons(pk_id): (id) 作为分段键
      • activities(idx_id_status_endtime): (id, status, end_time)
    • 事务中控制批次大小(如 500~2000),并在每批次之间提交。
    • 审计插入与更新在同一事务中执行,保证一致性;统计与回滚可在单独事务中执行。
    • 若数据量很大,建议先以查询筛出待处理ID(按排序)并在应用层分页推进(游标/键集分页),再传入 start_id/end_id 进行更新。

参数说明

  • :start_id, :end_id:分段处理的ID范围(包含边界),用于限制每批次处理规模。
  • :batch_size:本批次候选ID的选取上限(标准SQL为 FETCH FIRST n ROWS;不支持时请用等效分页语法)。
  • :reason:软删除原因说明(例如 'expired-unused soft delete')。
  • :operator_id:操作者标识(用于审计)。
  • :batch_id:批次标识(例如 '20241201_01'),用于统计与回滚定位。
  • :rollback_reason:回滚原因说明(例如 'rollback soft delete batch 20241201_01')。
  • 字段假设(请根据实际表结构调整):
    • coupons.expire_at:优惠券过期时间(DATE/TIMESTAMP)
    • coupons.created_at:优惠券创建时间(TIMESTAMP)
    • coupons.usage_count:使用次数(INT)
    • coupons.status:状态(如 'unused'、'inactive' 等)
    • coupons.activity_id:所属活动ID(外键)
    • coupons.is_system_reserved:是否系统保留(BOOLEAN/INT/CHAR,示例使用 BOOLEAN)
    • coupons.deleted_at:软删除时间(TIMESTAMP)
    • coupons.reason:最近一次状态变更原因(VARCHAR)
    • activities.status:活动状态(如 'ended'、'closed')
    • activities.end_time:活动结束时间(TIMESTAMP)

使用示例

  • 分批处理示例(批次1):

    • 参数:
      • :start_id = 1000001
      • :end_id = 1005000
      • :batch_size = 1000
      • :reason = 'expired-unused soft delete'
      • :operator_id = 'ops_user_123'
      • :batch_id = '20241201_01'
      • :rollback_reason = 'rollback soft delete batch 20241201_01'
    • 步骤:
      1. 使用“1) 分段选取本批次候选ID”获取ID列表并确认数量。
      2. 在同一事务中执行“2) 记录审计日志”与“3) 执行软删除”。
      3. 事务提交后执行“4) 本批次影响统计”确认影响范围。
    • 回滚:
      • 如需回滚批次1,使用“5.1 执行回滚”与“5.2 回滚动作审计”,传入相同的 :batch_id。
  • 键集分页提示(不依赖数据库分页语法的通用方案):

    • 先取上一批次最后一个ID为 :last_id(初始为最小ID-1)。
    • 查询: SELECT c.id FROM coupons c WHERE ...条件同上... AND c.id > :last_id ORDER BY c.expire_at ASC, c.created_at ASC, c.id ASC;
    • 在应用层仅取前 N 个ID作为本批次,再以这些ID的最小/最大值作为 :start_id/:end_id 执行审计与更新。

注意事项:

  • 全部语句应使用绑定变量传参,禁止拼接原始输入,避免SQL注入风险。
  • 在生产环境中请先在只读环境或小样本上验证条件与影响范围,再逐批推进。

示例详情

📖 如何使用

模式 1:即插即用(手动档)
直接复制参数化模版。手动修改 {{变量}} 即可快速发起对话,适合对结果有精准预期的单次任务。
加载中...
💬 模式 2:沉浸式引导(交互档)
一键转化为交互式脚本。AI 将化身专业面试官或顾问,主动询问并引导您提供关键信息,最终合成高度定制化的专业结果。
转为交互式
🚀 模式 3:原生指令自动化(智能档)
无需切换,输入 / 唤醒 8000+ 专家级提示词。 插件将全站提示词库深度集成于 Chat 输入框。基于当前对话语境,系统智能推荐最契合的 Prompt 并自动完成参数化,让海量资源触手可及,从此彻底告别“手动搬运”。
安装插件
🔌 发布为 API 接口
将 Prompt 接入自动化工作流,核心利用平台批量评价反馈引擎,实现"采集-评价-自动优化"的闭环。通过 RESTful 接口动态注入变量,让程序在批量任务中自动迭代出更高质量的提示词方案,实现 Prompt 的自我进化。
发布 API
🤖 发布为 Agent 应用
以此提示词为核心生成独立 Agent 应用,内嵌相关工具(图片生成、参数优化等),提供完整解决方案。
创建 Agent

🕒 版本历史

当前版本
v2.1 2024-01-15
优化输出结构,增强情节连贯性
  • ✨ 新增章节节奏控制参数
  • 🔧 优化人物关系描述逻辑
  • 📝 改进主题深化引导语
  • 🎯 增强情节转折点设计
v2.0 2023-12-20
重构提示词架构,提升生成质量
  • 🚀 全新的提示词结构设计
  • 📊 增加输出格式化选项
  • 💡 优化角色塑造引导
v1.5 2023-11-10
修复已知问题,提升稳定性
  • 🐛 修复长文本处理bug
  • ⚡ 提升响应速度
v1.0 2023-10-01
首次发布
  • 🎉 初始版本上线
COMING SOON
版本历史追踪,即将启航
记录每一次提示词的进化与升级,敬请期待。

💬 用户评价

4.8
⭐⭐⭐⭐⭐
基于 28 条评价
5星
85%
4星
12%
3星
3%
👤
电商运营 - 张先生
⭐⭐⭐⭐⭐ 2025-01-15
双十一用这个提示词生成了20多张海报,效果非常好!点击率提升了35%,节省了大量设计时间。参数调整很灵活,能快速适配不同节日。
效果好 节省时间
👤
品牌设计师 - 李女士
⭐⭐⭐⭐⭐ 2025-01-10
作为设计师,这个提示词帮我快速生成创意方向,大大提升了工作效率。生成的海报氛围感很强,稍作调整就能直接使用。
创意好 专业
COMING SOON
用户评价与反馈系统,即将上线
倾听真实反馈,在这里留下您的使用心得,敬请期待。

试用后开通会员即可无限使用

加载中...