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

Eri*_*son 450 mysql

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

还没有数据需要担心.

Yan*_*ton 840

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

ALTER TABLE tablename MODIFY columnname INTEGER;
Run Code Online (Sandbox Code Playgroud)

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

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

  • 友情提醒 - 列的默认值为NULLABLE,因此如果您有NOT NULL列,请不要忘记使用"MODIFY columnname INTEGER NOT NULL",否则您将列从NOT NULL更改为NULL. (75认同)
  • 它会没有数据丢失吗? (5认同)
  • 如果不存在新列类型的问题,alter table会删除表上的数据还是执行失败? (3认同)

小智 42

alter table table_name modify column_name int(5)
Run Code Online (Sandbox Code Playgroud)


Ric*_*ard 35

你也可以用这个:

ALTER TABLE [tablename] CHANGE [columnName] [columnName] DECIMAL (10,2)
Run Code Online (Sandbox Code Playgroud)


Tob*_*obb 11

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

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>';
Run Code Online (Sandbox Code Playgroud)

例如,如果要从列更改列,请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)';
Run Code Online (Sandbox Code Playgroud)

得到这样的输出:

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;
Run Code Online (Sandbox Code Playgroud)

!不保留唯一约束,但应该很容易用另一个if参数来修复concat.如果需要的话,我会把它留给读者来实现.


Ste*_*eTz 10

如果您想更改列详细信息、设置默认值并添加注释,请使用此

ALTER TABLE [table_name] MODIFY [column_name] [new data type] 
DEFAULT [VALUE] COMMENT '[column comment]' 
Run Code Online (Sandbox Code Playgroud)


Mah*_*ood 7

Alter TABLE `tableName` MODIFY COLUMN `ColumnName` datatype(length);
Run Code Online (Sandbox Code Playgroud)

例如:

Alter TABLE `tbl_users` MODIFY COLUMN `dup` VARCHAR(120);
Run Code Online (Sandbox Code Playgroud)


Has*_*mal 6

要更改列数据类型,有更改 方法和修改方法

ALTER TABLE student_info CHANGE roll_no roll_no VARCHAR(255);

ALTER TABLE student_info MODIFY roll_no VARCHAR(255);
Run Code Online (Sandbox Code Playgroud)

要更改字段名称也使用更改方法

ALTER TABLE student_info CHANGE roll_no identity_no VARCHAR(255);
Run Code Online (Sandbox Code Playgroud)


Óla*_*age 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)
Run Code Online (Sandbox Code Playgroud)