一、临时表:3步搞定海量更新
1. 建表塞数据,简单像填Excel
临时表就是个“中转仓库”,把要改的数据先存这儿:
sql复制CREATE TEMPORARY TABLE temp_order (id INT PRIMARY KEY, -- 主键别漏! new_price DECIMAL(10,2) -- 新价格塞这列
);
-- 插入数据,比如1000条 INSERT INTO temp_order VALUES (1, 99.9), (2, 128.5), ... (1000, 68.8);
→ 避坑:字段类型要和原表一致!价格列写成字符串?更新直接报错崩掉!
2. JOIN联动手动档,精准覆盖旧数据
临时表和原表“手拉手”匹配更新:
sql复制UPDATE products AS pJOIN temp_order AS t ON p.id = t.id -- 按ID配对 SET p.price = t.new_price; -- 一键覆盖旧价格
注意:没匹配到的数据原封不动,根本不怕误伤!
3. 省心省力,还能反复用
临时表自动销毁不占空间!下次更新同样方法再来一遍,比写复杂SQL省脑细胞多了。
二、Python脚本:滚雪球式更新,不怕崩库
▶ 为啥要分批?一次性更新10万条?
数据库直接罢工给你看!轻则卡死,重则主从延迟报警,老板找你喝茶。
▶ 代码实操:2000条一小批,稳如老狗
python运行复制import mysql.connector# 连接数据库(换成你的账号密码)
db = mysql.connector.connect(
host="localhost", user="root", password="123456", database="shop")
cursor = db.cursor()
# 1. 查ID范围,确定要更新多少条 cursor.execute("SELECT MIN(id), MAX(id) FROM products;")min_id, max_id = cursor.fetchone()
# 2. 每2000条滚一波 batch_size = 2000for start in range(min_id, max_id + 1, batch_size):end = start + batch_size - 1# 构建SQL,更新这一批数据 sql = f"UPDATE products SET price = price * 0.9 WHERE id BETWEEN {start} AND {end};"cursor.execute(sql) # 执行! db.commit() # 提交! print(f"更新ID {start}-{end} 完成,不影响其他人操作~")cursor.close()
db.close()
→ 效果:100万条数据分成500批,边更新边摸鱼,数据库稳得一匹!
三、附赠彩蛋:这些方法也试试?
▍ CASE语句——适合小批量
sql复制UPDATE productsSET price = CASE idWHEN 1 THEN 88 WHEN 2 THEN 199 -- 手动配ID和价格
...
ENDWHERE id IN (1,2,...);
缺点:100条以上写到手抽筋,还容易写错!
▍ 存储过程——大佬专属
把逻辑封装成“函数”,一键调用。但新手调试崩了?只能哭着找运维。
小编锐评:临时表+Python分批,操作无脑、安全系数拉满,尤其适合没数据库权限的小白!
→ 千万记得:
- 操作前备份数据!跑崩了还能回滚;
- 更新完SELECT抽查几条,别相信“已成功”!