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

说白了,使用批处理脚本转换SQL数据就像批量标注一样,但技巧在于如何正确组合文件和SQL语句。
我们先来说说最重要的事情。
在准备数据文件的过程中,我们去年做的项目中,有3 000个ID直接破坏了站点。
结果,所有错误都会在执行过程中报告。
说实话,这很尴尬。
还有一点,在编写批处理脚本时,请记住使用 FOR/F 循环来读取文件,每次读取 id 时,它都会被拆分为 UPDATE table SET column='value' WHERE id=xxx 等语句。
还有另一个关键细节。
例如需要使用MySQL;然而,对于分隔语句,SQL Server 无法做到这一点。
很多人不注意这一点。
起初我以为只要硬编码SET语句就足够了,但后来我意识到我错了。
该脚本应该能够用变量替换该值,例如使用 %i% 占位符。
等等,还有一件事。
为了防止特定的 SQL 语句超时,最好在执行前使用 WHERE id IN (...) 附加所有 ID。
在添加卷之前,建议您在第 1 0 部分运行几次以确保它们正确。

SQL中如何修改表的字段名和数据类型

哈,你的 SQL 用户指南非常全面,涵盖了所有可能的情况。
但我告诉你,当事情发生的时候,有时候事情并没有那么简单...
上周有一个客户问我,他改变了他的MySQL数据库中的一个字段类型,结果一半的表数据出现了乱码。
想一想:类型改变之前没有备份,改变之后没有验证。
这是一件好事,但一切都必须重做。
所以你在这些注意事项中说:“检查数据区”和“先做好备份”——这真的不是纸上谈兵!
例如,你提到的SQLite不能直接改变类型。
您首先需要创建一个新表并移动数据。
当数据量特别大的时候这个过程就很可怕了。
我自己遇到的陷阱是,我曾经修改过一个Oracle表,却忘记了这个字段在视图中。
修改表后,视图崩溃,整个应用程序挂起很长时间。
幸好有监控,我很快就发现了。

在您的示例中,您更改了 user_logs 表的 log_id。
如果这张桌子特别大,你在业务高峰时段服务,那么这张桌子就会被堵塞,整个业务就会被卡住。
在一个特定的项目中我使用Percona工具来修改表格。
虽然据说是无锁的,但我最终意识到,如果我在晚上交通畅通的时候换桌子,第二天醒来就没事了。
此外,这个工具并不容易使用。
如果参数设置不正确,问题就会变得更大。

你说得对,最好在测试环境中模拟一下。
但有时候测试环境和线上环境是不一样的。
例如,字段所依赖的外键约束在测试环境中可能没有相关表。
改了没问题,但是上线瞬间就崩溃了。
这是一份你必须非常小心的工作。

无论如何,这取决于你。
这些过程听起来很简单,但每一步都需要注意。
我还在想这个问题。
有时是否可以更改解决方案,例如B.添加一个新的字段然后慢慢迁移,而不是直接修改原来的字段?这取决于具体情况。

SQL修改字段类型的语法 SQL字段类型修改语句详解

我最近正在做一个数据库项目,这让我非常头疼。
我以前从未遇到过这样的事情。
更改字段类型可能会导致数据丢失,并且非常危险。

我记得在2 01 9 年,我参与了一个更改MySQL数据库中用户表的字段类型的项目。
本来很简单。
我想将 Phone_number 字段从 VARCHAR(2 0) 更改为 VARCHAR(3 0),但我犯了一个大错误。
我直接使用 ALTER TABLE 语句进行了更改,并找出了缺少某些数字的原因。
原因是没有考虑数据长度超过2 0个字符,直接截断数据,导致数据全部丢失。

当时心灰意冷,赶紧备份数据,再次导出,手动一一修复。
这个过程绝对是一场噩梦。
从那以后,我再也没有勇气随意改变字段类型了。

在那之后,我学到了很多东西。
例如,您应该在更改字段类型之前检查数据库语法。
不同的数据库有非常不同的语法。
例如,MySQL要求使用MODIFY COLUMN,Oracle要求使用MODIFY并要求指定约束。
这就像开车时了解每个路段的速度限制和规则。

我们来谈谈数据兼容性。
我也遇到过这个问题。
有一次我将项目中的一个字段从 INT 更改为 VARCHAR。
事实证明,这些都是数字。
一旦转成字符串,查询就变得麻烦了。
正如我后来了解到的,这种转换可能会导致准确性的损失,所以要小心。

为了避免重复类似的错误,在进行此类操作之前,请先进行备份,然后在测试环境中尝试。
如果风险太大,请考虑其他选项,例如创建新列和缓慢迁移数据。

顺便说一句,除了改变字段类型之外,还有很多其他的数据库操作命令,比如查询、插入、更新、删除,甚至创建表、索引、视图等,这也是数据库管理的核心技术。
不过,为了避免太累,我们暂时不谈这个。
我们改天再讨论这些操作。