如何在MySQL中更改列的数据类型?

如何在MySQL中更改列的数据类型?,mysql,Mysql,我想将多列的数据类型从float改为int。最简单的方法是什么 目前还没有数据可以担心。 这将更改给定列的数据类型 根据您希望修改的列数,最好生成一个脚本,或者使用某种mysql客户端GUI,您可以使用alter table。。。更改…方法,例如: mysql> create table yar (id int); Query OK, 0 rows affected (0.01 sec) mysql> insert into yar values(5); Query OK, 1 r

我想将多列的数据类型从float改为int。最简单的方法是什么

目前还没有数据可以担心。

这将更改给定列的数据类型


根据您希望修改的列数,最好生成一个脚本,或者使用某种mysql客户端GUI,您可以使用
alter table。。。更改…
方法,例如:

mysql> create table yar (id int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into yar values(5);
Query OK, 1 row affected (0.01 sec)

mysql> alter table yar change id id varchar(255);
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> desc yar;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | varchar(255) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
1 row in set (0.00 sec)
您还可以使用以下选项:

ALTER TABLE [tablename] CHANGE [columnName] [columnName] DECIMAL (10,2)

如果要将某一类型的所有列更改为另一类型,可以使用以下查询生成查询:

select distinct concat('alter table ',
                       table_name,
                       ' modify ',
                       column_name,
                       ' <new datatype> ',
                       if(is_nullable = 'NO', ' NOT ', ''),
                       ' NULL;')
  from information_schema.columns
  where table_schema = '<your database>' 
    and column_type = '<old datatype>';
select distinct concat('alter table ',
                       table_name,
                       ' modify ',
                       column_name,
                       ' bit(1) ',
                       if(is_nullable = 'NO', ' NOT ', ''),
                       ' NULL;')
  from information_schema.columns
  where table_schema = 'MyDatabase' 
    and column_type = 'tinyint(4)';
alter table table1 modify finished bit(1)  NOT  NULL;
alter table table2 modify canItBeTrue bit(1)  NOT  NULL;
alter table table3 modify canBeNull bit(1)  NULL;
并得到如下输出:

select distinct concat('alter table ',
                       table_name,
                       ' modify ',
                       column_name,
                       ' <new datatype> ',
                       if(is_nullable = 'NO', ' NOT ', ''),
                       ' NULL;')
  from information_schema.columns
  where table_schema = '<your database>' 
    and column_type = '<old datatype>';
select distinct concat('alter table ',
                       table_name,
                       ' modify ',
                       column_name,
                       ' bit(1) ',
                       if(is_nullable = 'NO', ' NOT ', ''),
                       ' NULL;')
  from information_schema.columns
  where table_schema = 'MyDatabase' 
    and column_type = 'tinyint(4)';
alter table table1 modify finished bit(1)  NOT  NULL;
alter table table2 modify canItBeTrue bit(1)  NOT  NULL;
alter table table3 modify canBeNull bit(1)  NULL;
!!不保留唯一约束,但应使用另一个
if
-参数将其固定到
concat
。如果需要的话,我会让读者来实现这一点

Alter TABLE `tableName` MODIFY COLUMN `ColumnName` datatype(length);
Ex:

Alter TABLE `tbl_users` MODIFY COLUMN `dup` VARCHAR(120);
要更改列数据类型,有change 方法和修改方法

要更改字段名,请使用更改方法

您还可以为列设置默认值,只需在值后面添加默认关键字

ALTER TABLE [table_name] MODIFY [column_name] [NEW DATA TYPE] DEFAULT [VALUE];

这也适用于MariaDB(测试版10.2)

如果要更改列详细信息并添加注释,请使用

ALTER TABLE [table_name] MODIFY [column_name] [new data type] DEFAULT [VALUE] COMMENT '[column comment]' 

友好提示-列的默认值为NULL,因此如果您有一个NOT NULL列,请不要忘记使用“MODIFY columnname INTEGER NOT NULL”否则,您会将列从NOT NULL更改为NULL。alter table是否会删除表上的数据,或者如果新列类型不符合要求,则执行失败?alter tablename MODIFY columnname INTEGER unsigned;我认为@Despertars warning可能也与保留字符集或COLLATE的任何规范相关。为了明确起见,下面的答案(使用
ALTER TABLE
)实际上将起作用,即使该列已经包含数据。但是,将浮点列转换为整数列会导致其中的任何非整数值被舍入为最接近的整数。我相信这是修改而不是更改,但可能两者都可以。
ALTER TABLE [table_name] MODIFY [column_name] [new data type] DEFAULT [VALUE] COMMENT '[column comment]'