将默认值设置为0,其中mysql Alter Table中不存在默认值

时间:2013-10-15 18:46:02

标签: mysql sql alter-table

有没有办法可以将默认值设置为0,其中列符合某些条件?例如没有默认值或者是varchar或INT?

似乎我有一个大约100列(...)的表格,我不想浏览每一列并设置默认值。

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

谢谢!

2 个答案:

答案 0 :(得分: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');

您可以根据列的其他属性更改条件,例如数据类型等

答案 1 :(得分: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"
    }
}