SQL批量修改某字段的一部分数据

说实话,当我第一次接手这个项目时,我经常开玩笑说使用SQL的UPDATE语句来更改数据。
我记得我第一次为某家公司进行系统优化。
他们要求我将所有状态为“待发货”的订单更改为“已发货”。
结果我手都抖了,WHERE子句写成Status='Pending for Shipping' OR Status='Shipping'。
天哪,订单在仓库里翻来覆去——那天我喝的咖啡特别清爽。

有趣的是,进行批量更改时最担心的是写错条件。
例如,更改用户的电子邮件前缀后,我本来想将所有LIKE“old%”替换为“new%”,但忘记了SET email =“new”||添加 SUBSTRING(email, 5 ) 部分。
结果,我将所有电子邮件地址直接更改为“newold%”。
我当时就绿了。
后来我发现在这个操作之前最好先在DEMO环境中运行几次,哪怕只是模拟运行。

当涉及到复杂的更改时,REPLACE 函数如果使用正确的话是一个奇迹,但如果使用不正确的话则是一场灾难。
客户要求将所有文档中的“公司”更改为“集团”。
我把“计算机网络”这个词改了,老板立刻叫我去喝茶。
在这种情况下,使用 LIKE 'company%' 加正则表达式会更安全,尽管写起来比较困难。

说到数据备份,我经历过太多因为没有备份而半夜哭泣的案例。
有一个外包项目,客户热衷于上网。
我坚持让他们先保住桌子,但他们不听我的。
修改数据后发现某个关键字段的值变成了NULL。
那天晚上我给她远程调了三个小时,我的手都快抽筋了。

顺便说一下,还有一个很容易被忽视的危险。
比如计算增量工资,比如你提供的工资=工资1 .1 0,非常直观。
不过,如果要历年调整薪资的话,最好加上一个 WHERE YEAR(hire_date) = YEAR(CURRENT_DATE)
1 条件,否则三年前加入公司的老员工的薪资可能会翻倍。
我曾经帮助一家餐饮公司扭亏为盈,结果老板就走了。

现在改数据之前,习惯先检查3 条记录看看效果,然后用EXPLAIN分析索引,最后执行。
虽然速度较慢,但​​可以避免半夜被手机吵醒。
其实最保险的方法就是写一个存储过程,一步步运行。
如果遇到任何错误,可以回滚。

sql的update语句如何实现对某字段的部分值批量更新?

是的,这是一个问题。
REPLACE 函数在 UPDATE 中用于替换字段中的某些单词。

简单来说,UPDATE表名SET字段名=REPLACE(原值,“旧”,“新”)WHERE条件。

例如,如果要在地址表中将“海淀区”替换为“朝阳区”,则写入:
UPDATE 地址 SET District=REPLACE(district, '海淀区', '朝阳区') WHERE District LIKE '%海淀区%';
记得使用 WHERE 条件,否则整个表都会改变。

请注意,替换前请检查哪些内容会发生变化,例如 SELECT FROM 地址 WHERE District LIKE '%海淀区%';
替换时,原值必须是唯一的,不要误替换。
手术前做好备份,以防万一出现问题。

sql修改某一列的某几条数据

几天前,公司的一个旧系统中发现了一个奇怪的现象。
员工表上的名字字段有点奇怪,好像“小王”突然变成了“小大王”。
去年,有人发现一名实习生在使用 SQL 语句时不小心重复了“小”字。
这次事件表明SQL更新操作虽然简单,但一定要小心,准确控制更新的范围和影响
我记得当时是下午三点。
坐在办公室的椅子上,屏幕上显示着SQL编辑器,手指敲击着键盘。
我突然想到:如果公司员工的名字里有一个“小”字。
同样,执行更新操作时必须特别小心。
例如,如果要将“小”字后面的所有名字改为“小大”,则将“小张”更改为“小张大”。
我们需要确保这个替换功能只对特定名称有效。

于是我在编辑器里写了这样一条SQL语句: UPDATE employee SET name = REPLACE(name, '小', '小大') WHERE name IN('小李', '小王', '小刘');
我记得当我认识这个语句里的很多名字的时候,我感触良多,里面就包含了一个小字。
不过,这一说法很快就得到了执行,没有发生什么意外。

事后看来,其实在日常工作中,这种更新操作还是比较常见的。
例如,我们是一些过时的数据可能需要更新;或者您可能需要在数据迁移过程中格式化数据。
但必须对数据进行备份,以确保每次访问过程中出现意外时不影响正常业务。

但是,这样的更新操作是否过于频繁,或者是否可以通过优化数据库的设计来减少这样的手动修改。
这些都是值得思考的问题。