2013-10-15 23 views
0

有没有一种方法可以将默认值设置为0,其中列匹配某些标准?如没有默认值或是varchar或INT?设置默认为0,如果没有默认情况下存在mysql更改表

看来我有一个约100列(...)的表,我不想通过每一个,并设置一个默认值。

这只是一个测试机器,它似乎与我安装的新版本的mysql有关。

谢谢!

回答

3

你可以检查INFORMATION_SCHEMA产生一系列ALTER TABLE语句:

例如,选择的是目前还没有默认列,从给定的数据库&表:

SELECT CONCAT('ALTER TABLE `', TABLE_NAME, 
    '` ALTER COLUMN `', COLUMN_NAME, '` SET DEFAULT = 0;') AS _sql 
FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_DEFAULT IS NULL 
AND (TABLE_SCHEMA, TABLE_NAME) = ('mydatabase', 'mytable'); 

可以基于列,如其他属性改变的条件数据类型等。

+0

谢谢你的帮助。不幸的是,我得到的表'the_database_name.columns'不存在 – styks

+0

我已经编辑了上述内容以使用INFORMATION_SCHEMA来限定COLUMNS表。 –

1

为列的默认值号是架构的一个属性,并基于该是在它的数据不能改变。换句话说,您不能将SELECT语句与ALTER TABLE语句组合在一起。

最接近它的可能是使用Perl或其他一些脚本语言为您动态生成ALTER TABLE语句。然后你可以将这些语句应用到你的数据库。

类似的信息(伪代码):

@columns = "describe table_name"; 
for each $column in @columns { 
    if (conditions are right){ 
     print "ALTER TABLE CHANGE COLUMN $column $column int default 0" 
    } 
} 
相关问题