Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中更改列数据类型时如何保留数据?_Sql_Mysql_Types - Fatal编程技术网

在MySQL中更改列数据类型时如何保留数据?

在MySQL中更改列数据类型时如何保留数据?,sql,mysql,types,Sql,Mysql,Types,例如,假设我有一个TINYINT列,我想将其更改为ENUM。是否可以编写一个MySQL查询,在映射现有数据时更改列的数据类型,以便(例如)0变为No,1变为Yes,2变为Maybe?在旧列旁边创建新列,使用更新来移动数据,然后删除原始列。我不确定这在MySQL中是否可行,但另一种解决方案是: 添加具有新名称的新类型的新列 设置新列值(给定旧列值) 删除旧列 重命名新列,使其与旧列同名 这需要一系列的4个步骤- 添加新列、在新列中设置数据、删除旧列、重命名新列 Use [Databasename]

例如,假设我有一个
TINYINT
列,我想将其更改为
ENUM
。是否可以编写一个MySQL查询,在映射现有数据时更改列的数据类型,以便(例如)
0
变为
No
1
变为
Yes
2
变为
Maybe

在旧列旁边创建新列,使用更新来移动数据,然后删除原始列。

我不确定这在MySQL中是否可行,但另一种解决方案是:

  • 添加具有新名称的新类型的新列
  • 设置新列值(给定旧列值)
  • 删除旧列
  • 重命名新列,使其与旧列同名

  • 这需要一系列的4个步骤- 添加新列、在新列中设置数据、删除旧列、重命名新列

    Use [Databasename]
    Go
    ALTER table [tableName]
    Add [newColumnname] datatype
    GO
    Update [tableName] SET [newColumnname] = [oldColumnname]
    GO
    ALTER table [tableName] Drop Column [oldColumnname]
    GO
    EXEC sp_RENAME 'tableName.newColumnname' , 'oldColumnname', 'COLUMN'
    GO
    

    好吧我有点希望得到一些强大而复杂的超级查询,但这应该可以做到如果有疑问,请用简单的方法执行:-)