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

时间:2009-08-31 10:44:24

标签: mysql

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

目前还没有数据需要担心。

9 个答案:

答案 0 :(得分:790)

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

ALTER TABLE tablename MODIFY columnname INTEGER;

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

根据您希望修改的多少列,最好生成脚本,或者使用某种mysql客户端GUI

答案 1 :(得分:42)

alter table table_name modify column_name int(5)

答案 2 :(得分:34)

您也可以使用:

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

答案 3 :(得分:10)

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

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>';

例如,如果您要将列从tinyint(4)更改为bit(1),请按以下方式运行:

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。如果需要的话,我会把它留给读者来实现..

答案 4 :(得分:7)

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

例如:

Alter TABLE `tbl_users` MODIFY COLUMN `dup` VARCHAR(120);

答案 5 :(得分:5)

您使用alter table ... change ...方法,例如:

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)

答案 6 :(得分:2)

  

要更改列数据类型,请进行更改   方法和修改方法

alter table student_info change roll_no roll_no varchar(255);

alter table student_info modify roll_no varchar(255);
  

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

alter table student_info change roll_no identity_no varchar(255);

答案 7 :(得分:1)

https://dev.mysql.com/doc/refman/8.0/en/alter-table.html

您也可以为该列设置默认值,只需在其后添加DEFAULT关键字即可。

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

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

答案 8 :(得分:0)

如果要更改列详细信息,请添加评论

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