Tha*_*iar 3 mysql sql alter-table alter-column
我需要将列类型从tinyInt(用作bool)更改为Varchar,而不丢失数据。我在 stack-overflow 上找到了很多答案,但它们都是用 postgres 编写的,我不知道如何在 Mysql 中重写它。堆栈溢出问题的答案如下:
ALTER TABLE mytabe ALTER mycolumn TYPE VARCHAR(10) USING CASE WHEN mycolumn=0 THEN 'Something' ELSE 'TEST' END;
类似的逻辑在 Mysql 中会是什么样子?
您显示的语法在 MySQL 中没有等效语法。在 ALTER TABLE 期间无法修改值。MySQL 中的 ALTER TABLE 只会使用内置类型转换来转换值。也就是说,整数将被转换为该整数值的字符串格式,就像在字符串表达式中一样。
对于 MySQL,您需要执行以下操作:
添加新列:
ALTER TABLE mytable ADD COLUMN type2 VARCHAR(10);
Run Code Online (Sandbox Code Playgroud)
回填该列:
UPDATE mytable SET type2 = CASE `type` WHEN 0 THEN 'Something' ELSE 'TEST' END;
Run Code Online (Sandbox Code Playgroud)
如果表有数百万行,您可能必须分批执行此操作。
删除旧列并可选择将新列重命名为旧列的名称:
ALTER TABLE mytable DROP COLUMN `type`, RENAME COLUMN type2 to `type`;
Run Code Online (Sandbox Code Playgroud)
另一种方法是更改列,允许整数转换为整数值的字符串格式。然后根据需要更新字符串。
ALTER TABLE mytable MODIFY COLUMN `type` VARCHAR(10);
UPDATE mytable SET `type` = CASE `type` WHEN '0' THEN 'Something' ELSE 'TEST' END;
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,请务必先在另一张桌子上进行测试,然后再在真实的桌子上尝试。
| 归档时间: |
|
| 查看次数: |
4860 次 |
| 最近记录: |