用于修改列数据类型的Sql脚本

时间:2011-01-04 20:18:47

标签: mysql

有没有人知道一个脚本来改变表中列的数据类型,这是数据库的一部分? e.g。

我在20个不同的数据库中有一个用户表,列有相同的列。我想更改该表中其中一列的数据类型。

2 个答案:

答案 0 :(得分:1)

您可以使用information_schema生成DDL命令来修改列。

例如,如果所有表都被命名为“user”(并且您不想更改其他数据库中没有“user”表),并且您的列名为“change_me”,并且您希望使它成为一个永远不为null的unsigned int,你可以这样做:

select concat('ALTER TABLE ',table_schema,
'.',table_name,
' MODIFY COLUMN ',column_name,
' INT UNSIGNED NOT NULL;') as sql_stmt 
into outfile '/tmp/modify_columns.sql'
from information_schema.columns 
where table_name = 'user' 
and column_name = 'change_me';

\. /tmp/modify_columns.sql

答案 1 :(得分:0)

还要记住,很多时候,列必须为空才能更改数据类型,并且将依赖于DBMS。请指定的数据类型。备选方案:

desc foo;
Name                           Null     Type                                                                                                                                                                                          
------------------------------ -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
BAR1                                    NUMBER      

-- this will not work:
alter table foo modify ( bar1 varchar(255) );    


--instead
alter table foo add ( bar2 varchar(255));

-- assume the DB will auto change type:
update foo set bar2=bar1;

alter table foo drop (bar1);
alter table foo rename column bar2 to bar1;