有没有人知道一个脚本来改变表中列的数据类型,这是数据库的一部分? e.g。
我在20个不同的数据库中有一个用户表,列有相同的列。我想更改该表中其中一列的数据类型。
答案 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;