¥
立即购买

数据库查询生成专家

16 浏览
1 试用
0 购买
Dec 1, 2025更新

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

包含4个提示词变量:
变量 描述 示例
操作描述 需要执行的数据库操作的具体描述 获取所有活跃用户的基本信息
目标数据表 需要操作的主要数据库表名称 users
查询条件 查询的过滤条件和限制条件 status='active' AND create_time > '2023-01-01'
排序要求 结果集的排序规则和要求 按创建时间降序排列
查看全部

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注入风险。
  • 在生产环境中请先在只读环境或小样本上验证条件与影响范围,再逐批推进。

示例详情

解决的问题

把“自然语言需求”快速变成“可直接执行的高质量SQL”,帮助后端与数据团队在查询、统计、更新、删除等常见场景中更快、更稳、更安全地完成数据操作。具体目标包括:1) 减少手写SQL的时间与试错成本;2) 默认遵循安全与性能规范,降低误操作与慢查询风险;3) 兼容多种数据库方言,方便跨项目使用;4) 自动输出清晰的逻辑说明与注意事项,提升代码评审与协作效率;5) 遇到复杂需求可给出替代方案与优化建议,让新手写出资深水平、资深也能显著提效。

适用用户

后端开发工程师

将业务描述快速转成可执行SQL,覆盖用户管理、订单查询、库存更新等场景;附带注释与安全条件,减少调试与返工,加速交付

数据分析师

用自然语言生成分组、统计、筛选查询,快速产出报表与校验样本;减少反复改写,提高分析准确性与交付速度

产品运营/增长经理

无需深度数据库经验,一键得到用户分层、留存与转化查询;快速验证活动效果与渠道质量,支持持续迭代优化

特征总结

依据业务意图,轻松生成查询、更新、删除SQL,减少手写时间与错误率,让数据操作快速落地
自动优化过滤与条件限制,避免全表扫描,响应更快、结果更稳,轻松应对高并发场景
兼容常见数据库类型,一键切换环境与语法细节,降低迁移和跨库维护成本
内置安全规范,自动加防护条件,降低误删、越权与注入风险,守护核心数据
输出附带清晰注释与逻辑说明,新人也能看懂,便于团队交接、复盘与审计留痕
支持参数化模板,按业务字段灵活复用,批量生成多场景查询,显著提升复用率
针对复杂统计与报表需求提供优化与替代方案,避免慢查询卡顿,保障体验
一次设置排序、分页、分组规则,持续复用,稳定获得期望结果与可比数据
自动梳理关联关系与字段选择,减少漏连错连,确保查询结果准确可信

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

AI 提示词价格
¥20.00元
先用后买,用好了再付款,超安全!

您购买后可以获得什么

获得完整提示词模板
- 共 745 tokens
- 4 个可调节参数
{ 操作描述 } { 目标数据表 } { 查询条件 } { 排序要求 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
使用提示词兑换券,低至 ¥ 9.9
了解兑换券 →
限时半价

不要错过!

半价获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59