SQL & Excel 批量处理技巧整理
快速、可复用的 SQL 与 Excel 批量处理技巧集合,覆盖:关联更新、拼接更新、替换更新、拼接查询以生成初始化 SQL、Excel 自动生成建表语句与 IN 列表。
1. 关联表更新(批量初始化 / 同步)
用途:通过关联表把一个表的字段刷新为另一个表的值,常用于填充冗余字段、同步层级信息。
示例(MySQL):
1 | UPDATE sku_table a |
要点:
- 生产库先
SELECT
验证影响行:SELECT a.id FROM sku_table a JOIN sku_category b ... LIMIT 10;
- 大表拆批(根据 id 范围或
LIMIT
+ 主键)以避免锁表。 - 更新前务必备份或使用事务(支持的场景)。
2. 拼接更新(增加前缀/后缀 / 构建层级)
用途:为字段加固定前后缀、生成组合字段、构造层级路径等。
示例:
1 | UPDATE sku_table |
要点:
- 控制空值:
CONCAT
会把NULL
变为NULL
,可用CONCAT_WS
或COALESCE
处理。 - 若需格式化数字可用
LPAD
、FORMAT
等。
3. 替换更新(清洗特殊字符)
用途:批量替换字段中的字符(比如把 \\
换成 /
),适合清洗或标准化字符串。
示例:
1 | UPDATE table_name |
要点:
- 使用
WHERE
过滤以减小扫描量。 - 对于复杂正则替换,MySQL 8 可用
REGEXP_REPLACE
。
4. 拼接查询生成初始化 SQL(导出执行脚本)
用途:把查询结果拼成 INSERT
/ UPDATE
语句,用于迁移或批量初始化。
示例:
1 | SELECT CONCAT( |
要点:
- 对字符串做转义(例如把单引号替换为两个单引号)。
- 导出结果到文件,再通过脚本分批执行。
5. Excel 自定义函数自动生成建表语句
用途:把表字段清单结构化成 CREATE TABLE
,适合产品/DBA 协作场景。
方法建议:
- Excel 列:字段名、类型、是否为空、默认值、注释。
- 使用公式拼接每列定义,或用 VBA 写一个
MakeCreateTable()
函数输出完整CREATE TABLE
。
简易公式示例(假设 A2=col, B2=type, C2=null_flag, D2=default, E2=comment):
1 | =CONCAT("`", A2, "` ", B2, IF(C2="NO"," NOT NULL",""), IF(D2<>""," DEFAULT '"&D2&"'",""), IF(E2<>""," COMMENT '"&E2&"'",""), ",") |
将所有列公式合并并包裹 CREATE TABLE name ( ... )
。
6. Excel 的 TEXTJOIN 快速生成 IN
条件
用途:把一列值拼成 SQL 的 IN
列表,便于临时查询或调试。
公式示例(A101:A141 为值范围):
1 | ="('" & TEXTJOIN("','", TRUE, A101:A141) & "')" |
要点:
- 当行数很多时,注意
IN
列表长度与 SQL 性能;对大集合优先用临时表或JOIN
。
实战注意与最佳实践(速查)
- 备份优先:任何批量写操作前先备份表或在事务中验证。
- 先
SELECT
验证:用SELECT
模拟将要更新的行集合。 - 分批执行:大表使用
LIMIT
+ 主键区间或chunk
策略,避免长事务与行锁。 - 索引与性能:更新涉及索引字段时注意索引维护成本,尽量基于主键做分片。
- 日志与回滚策略:把生成的更新语句保存日志,便于回滚与审计。