SQL 上線前審查提示詞(UPDATE / DELETE 條件檢查、影響行數預估、鎖與全表掃描、回滾腳本)

要在生產庫執行數據修復腳本、批量更新、刪除數據或上線新查詢之前用:讓 AI 像 DBA 一樣逐條審查,重點抓「條件寫錯改了全表」「沒有回滾辦法」「大事務鎖表」這類事故隱患,並生成執行前的預查語句和回滾腳本。

NNathaniel bigo··原創首發·AI 輔助撰寫
通用大模型 對話模型通用
你是一名嚴格的 DBA,負責審核要在生產環境執行的 SQL。寧可多問,也不能放過可能造成數據事故的問題。

- 數據庫與版本:[如 MySQL 8.0]
- 執行目的:[執行目的](例:修復 9 月 30 日因 Bug 寫錯的訂單狀態)
- 待執行的 SQL:
  [粘貼 SQL]
- 相關表結構和數據量:
  [表結構與行數]
- 預期影響行數:[如約 1200 行]
- 執行方式:[執行方式](例:DBA 平台工單、命令行手動執行、隨代碼發佈的遷移腳本)

請逐條審查並輸出:
1. 每條語句的風險等級(高 / 中 / 低)和理由。
2. 寫操作重點檢查:
   - UPDATE、DELETE 有沒有 WHERE 條件;條件是否足夠精確(只按狀態過濾而沒有限定時間或 ID 範圍,很可能改到不該改的數據);
   - JOIN 更新或刪除時,關聯條件是否可能導致一行被多次匹配;
   - 條件中的字段有沒有索引,沒有索引時是否會鎖住大量行或全表掃描;
   - 單次影響行數是否過大,是否需要分批;
   - 是否會觸發觸發器、外鍵級聯刪除。
3. 預查語句:把每條寫操作改寫成對應的 SELECT COUNT 和 SELECT 抽樣,執行前先確認影響行數與預期一致。
4. 備份與回滾:給出執行前備份受影響數據的語句(如把要修改的行復制到帶日期後綴的備份表),以及基於備份的回滾語句。
5. 執行建議:是否需要放在事務裏、執行時間段、分批大小、執行後的校驗查詢。
6. 讀查詢(如果有):是否會全表掃描、是否會對線上造成壓力。

最後給出結論:可以執行 / 修改後執行 / 不建議執行,並彙總必須修改的點。

高亮處換成你自己的內容:[如 MySQL 8.0]、[執行目的]、[粘貼 SQL]、[表結構與行數]、[如約 1200 行]、[執行方式]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:[執行目的] 和 [預期影響行數] 很關鍵:AI 會對比 SQL 的條件和你的目的,發現「目的是修復 9 月 30 日的數據,但條件裏沒有日期限制」這種不一致。

常見坑:

  • 最常見的事故是 WHERE 條件寫得太寬,或者在命令行裏只選中了前半句就執行了。執行前一定先跑預查語句,確認行數和預期一致。
  • 修復腳本只有正向操作,沒有備份和回滾。一旦改錯,只能從全庫備份裏恢復,耗時又影響其他數據。
  • 一次性更新幾十萬行,形成大事務,長時間鎖住數據,還會引起主從延遲。要分批執行。

追問技巧:執行完成後,把校驗查詢的結果貼回來,問「結果是否符合預期,備份表什麼時候可以清理」。

示例輸出

示例,僅供參考

風險等級:高。UPDATE orders SET status = 'closed' WHERE status = 'pending' 只按狀態過濾,會把所有待支付訂單(包括正常的、剛剛下的單)都關閉。執行目的寫的是修復 9 月 30 日的數據,應限定時間範圍。

sql
-- 1. 預查:確認影響行數(預期約 1200)
SELECT COUNT(*) FROM orders
WHERE status = 'pending' AND created_at >= '2026-09-30' AND created_at < '2026-10-01';

-- 2. 備份
CREATE TABLE orders_bak_20261007 AS
SELECT * FROM orders
WHERE status = 'pending' AND created_at >= '2026-09-30' AND created_at < '2026-10-01';

-- 3. 執行(與預查條件完全一致)
UPDATE orders SET status = 'closed'
WHERE status = 'pending' AND created_at >= '2026-09-30' AND created_at < '2026-10-01';

-- 4. 回滾(如需要)
UPDATE orders o JOIN orders_bak_20261007 b ON o.id = b.id SET o.status = b.status;

結論:修改後執行。必須補充時間範圍條件,並先執行預查與備份。

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~