更改数据库列名和类型而不丢失数据

6

我想要将一个列的名称和类型从BIT(1)更改为INT(1)

我正在使用MySQL Workbench。

我尝试了以下操作:

ALTER TABLE table_name ADD new_column_name INT(1)

update table_name
set new_column_name = convert(INT(1), old_column_name)

ALTER TABLE table_name DROP COLUMN old_column_name

但是我遇到了这个错误。
You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'INT(1), old_column_name)'

2
你是否知道 INT(1) 并不仅限于一个数字? - user330315
5个回答

5
ALTER TABLE table_name ADD new_column INT(1);

update table_name
  set new_column = case when old_column then 1 else 0 end;

ALTER TABLE table_name DROP COLUMN old_column;

或者直接使用:

ALTER TABLE table_name MODIFY COLUMN old_column int;

谢谢老兄,它正在运行。 但是我想知道为什么我会得到那个错误。 - mrsus

4
ALTER TABLE table_name CHANGE old_column_name new_col_name varchar(20) not null; 

我以varchar为例,您可以更改为任何您喜欢的数据类型。之后,您还可以添加约束。


2

试试这样做。

ALTER TABLE table_name ADD new_column_name INT

update table_name
set new_column_name = convert(int,convert(varchar(1), old_column_name))

出现以下错误-->您的SQL语法存在错误,请查看与您的MySQL服务器版本相对应的手册,以获取正确的语法使用方式:'INT,convert(VARCHAR(1),old_column_name)'。 - mrsus
我错了。convert()确实是MySQL函数(尽管似乎相当有限)。 - user330315

2

INT(1)不是一个有效的转换类型。

此外,正确的语法是CONVERT(<element>, <type>)

您可以在这里找到更详细的信息。


0
ALTER TABLE table_name ALTER COLUMN creation_date TYPE timestamp USING creation_date::timestamp;

试试这个


虽然这可以回答问题,但最好在答案中添加一些解释。 - DaFois

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接