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

Mysql 用于修改列数据类型的Sql脚本,mysql,Mysql,是否有人知道一个脚本来改变作为数据库数量一部分的表中列的数据类型?e、 g 我在20个不同的数据库中有一个相同列的用户表。我想更改该表中一列的数据类型 您可以使用信息模式生成DDL命令来修改列 例如,如果所有的表都命名为“user”(并且在其他数据库中没有您不想更改的“user”表),并且您的列命名为“change_me”,并且您希望使其成为一个从不为null的无符号int,则可以执行以下操作: select concat('ALTER TABLE ',table_schema, '.',tab

是否有人知道一个脚本来改变作为数据库数量一部分的表中列的数据类型?e、 g


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

您可以使用信息模式生成DDL命令来修改列

例如,如果所有的表都命名为“user”(并且在其他数据库中没有您不想更改的“user”表),并且您的列命名为“change_me”,并且您希望使其成为一个从不为null的无符号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

还要记住,很多时候,列必须为空才能更改数据类型,这取决于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;