有没有一种方法可以将默认值设置为0,其中列匹配某些标准?如没有默认值或是varchar或INT?设置默认为0,如果没有默认情况下存在mysql更改表
看来我有一个约100列(...)的表,我不想通过每一个,并设置一个默认值。
这只是一个测试机器,它似乎与我安装的新版本的mysql有关。
谢谢!
有没有一种方法可以将默认值设置为0,其中列匹配某些标准?如没有默认值或是varchar或INT?设置默认为0,如果没有默认情况下存在mysql更改表
看来我有一个约100列(...)的表,我不想通过每一个,并设置一个默认值。
这只是一个测试机器,它似乎与我安装的新版本的mysql有关。
谢谢!
你可以检查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');
可以基于列,如其他属性改变的条件数据类型等。
为列的默认值号是架构的一个属性,并基于该是在它的数据不能改变。换句话说,您不能将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"
}
}
谢谢你的帮助。不幸的是,我得到的表'the_database_name.columns'不存在 – styks
我已经编辑了上述内容以使用INFORMATION_SCHEMA来限定COLUMNS表。 –