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策略,避免长事务与行锁。 - 索引与性能:更新涉及索引字段时注意索引维护成本,尽量基于主键做分片。
- 日志与回滚策略:把生成的更新语句保存日志,便于回滚与审计。