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

嘿,我告诉你,我以前使用过 SQL 来转换数据,这真的很令人沮丧。

去年之前,我在公司做一个项目,有一个名为username的表,里面包含了用户信息。
有一个字段称为电子邮件。
许多用户的电子邮件前缀为 oldcompany.com,并希望将其更改为 newcompany.com。

我刚刚使用了 UPDATE 语句并想立即更改它。
结果当我写完WHERE条件的时候,脑子一热,忘了加LIKE。
你看:
sql 更新用户 SET EMAIL = REPLACE(电子邮件, '旧公司', '新公司') WHERE 电子邮件 = 'oldcompany.com';
好的,现在我扫描了整个表格,发现所有电子邮件地址都来自 oldcompany.com,并已更改为 newcompany.com。
有数百个带有 test@oldcompany.com 的电子邮件地址,它们都已更改为 test@newcompany.com。

我当场惊呆了。
我立即去找DBA做了备份,然后写了一个反向更新语句,将所有错误都恢复了。
你说烦不烦。

因此,使用UPDATE时,必须显式地写出WHERE条件,尤其是使用LIKE时。
想一想,如果你只想把前缀改成Oldcompany,但又不想包含test@oldcompany.com,只要写email='oldcompany.com'就成功了。

此外,在进行更改之前,您必须创建备份!如果我当时退缩的话,损失会小很多。
这是真的,别信。

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

说白了,利用SQL的UPDATE语句批量修改字段数据其实是很简单的。
我们先来说说最重要的事情。
指定要修改的表名和字段名后,必须指定新值。
例如,我们去年跑的一个项目中,我们使用了一条UPDATE语句,将“员工”表中工资低于5 万的员工的工资提高了1 0%。
代码如下:
sql 更新员工设置薪资 = 薪资 1 .1 0,其中薪资 < 5> 另一件事是,有时您可能需要替换字段中的特定文本。
例如,大约 3 ,000 个项目使用 REPLACE 函数将“customers”表中所有以“old”开头的电子邮件地址中的“old”替换为“new”。

sql UPDATE Customer SET email = REPLACE(email, 'old', 'new') WHERE email LIKE 'old%';
起初我以为只有数据库专家才能运行这个,但后来我发现我错了。
事实上,它可以用于许多日常数据维护任务。
等等,还有一件事,在做这种事情之前不要忘记备份数据。
说实话,这确实是一个诡计。
我丢失了数据,因为我没有备份。

最后,提醒一下。
很多人没有注意到这一点。
更新时要小心,并确保您知道正在修改哪些记录,并且修改的数据准确有效。
除了备份之外,您认为还可以采取哪些预防措施来防止数据丢失或错误更新?

一次修改多条指定数据-- SQL小技巧

哎呀,我来说说我遇到的坑吧。
去年我们公司有一个哥们想要批量更改用户积分。
数据量很大,有数百条。
直接导入Excel? 我告诉他,不要这样做,风险很大。

我要求他创建一个批处理脚本。
想一想,创建一个文本文件,每个用户 ID 一行,并且没有多余的空格。
然后写一个批处理,大概是这样的:
batch @回声关闭 设置本地启用延迟扩展 for /f "tokens=1 delims=:" %%i in (idlist.txt) do ( 设置“id=%%i” sqlcmd -S YourServerName -U YourUsername -P YourPassword -Q "更新用户设置点=点+1 00 WHERE UserID=%id%" )
你看,它循环遍历文件中的每个ID,构造一条SQL语句,然后直接用sqlcmd执行。
哥们说,嘿,是的,这很容易。
他将积分=积分+1 00调整为他想要的值。

运行完后,我让他先到测试库试试,他说可以,没问题。
结果呢? 生产数据库直接被破坏,上千次修改,所有数据都错位了。
后来发现文件中某个ID前后有空格,脚本没有正确处理。

所以,我告诉他,你必须小心这件事。
先测试一下! 你备份过数据库吗? 必须有! 更改后请务必检查。
运行 SELECT FROM Users WHERE UserID IN(ID 列表)以查看是否正确。
不同的数据库可能需要调整。
如果他改成MySQL,他使用的SQL Server可能也需要改变。

后来哥们吸取教训,修改后先跑一小批,没问题再跑全批。
你看,在实际操作中,有很多细节。