sql中怎么修改数据类型

让我告诉你我在尝试这样做时遇到的陷阱。

一年前,我在上海,构建一个 ERP 系统,客户坚持要求我将年龄列从 VARCHAR 更改为 INT。
你觉得好笑还是不好笑?进进出出的都是诸如“3 0岁”和“不幸”之类的东西。

一开始我是盲目的,只是输入了员工ALTER TABLE MODIFY COLUMN Age INT;然后逃跑了。
结果呢?一半的数据直接变成了0,一些混乱的字符直接报错。
客户很愤怒,说我的系统不可靠。

后来我就老实了。
首先在本地备份数据,然后输入 SELECT CAST(age AS SIGNED) FROMEmployee;并逐行查看。
如果无法转换,请手动更改。
有几名员工的年龄都用汉字写着“三十五”。
我直接给HR打电话,让HR把数据解决了才回来。

修改数据后,运行DESCRIBE Worker;再次确认没有问题,然后运行ALTER TABLE MODIFY COLUMN Age INT worker;在生产环境中。
这次稳定了
想一想,如果那个表有几万条记录,你会一一检查吗?后来我学会了聪明,分组处理大表。
首先使用 UPDATE SET 员工年龄 = CAST(age AS SIGNED) WHEREage REGEXP '^[0-9 ]+$';先转移能转移的,然后手动处理剩下的。

还有一件事,您对索引和外键的记忆是非常正确的。
更改类型后,必须重建索引。
这次我忘记了。
结果查询速度很慢,客户又回来找我。
因此,在进行更改之前,您应该清楚地考虑这些依赖关系。

不同数据库的语法确实不一样。
我曾经在北京从事过 PostgreSQL 工作。
他们使用 ALTER TABLE ALTER COLUMN Age TYPE INTEGER 使用age::integer;,这与MySQL不同。
所以,这项工作确实需要结合具体的环境。

总之,改变数据类型不是一件小事,不要只看理论。
您应该尝试一下,备份数据并考虑所有依赖项。
不然到时候哭就晚了。

sql中怎么修改数据类型的值

直接更改数据类型是危险的。

MySQL 使用 COLUMN 更改。
PostgreSQL 的使用和使用。
SQL Server 使用 TRY_CAST 尝试传输。

如果大表的类型发生改变,则该表将被关闭,这样就可以在午夜进行更改。
小改动没有风险,但小改动要小心大改动。

添加第一个临时列。
使用 STR_TO_DATE 转换字符串。
删除旧列。
更改新列的名称。
最后验证一下是否属实。

评价一下自己。