临时表批量更新?Python批量更新数据库?


C盘又飘红了?数据库批量更新时卡成狗,还怕不小心锁死整个表?别慌!小编实测两种​​小白也能搞定的神操作​​,临时表+Python脚本双管齐下,10万条数据5分钟跑完,连运维大佬都偷偷在用!

一、临时表: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抽查​​几条,别相信“已成功”!

相关文章

zui-xin