需求背景:
线上有一个 platform属性,原有长度为 varchar(10),但是突然需要填入一个11位长度的值;而偏偏这个属性在线上100张表中有50张都存在,并且名字各式各样,庆幸都包含 platform;例如 platform_, a_platform等;
如何快速解决?
1.首先查出哪些表和列存在platform
select table_name,column_name,column_type from INFORMATION_SCHEMA.Columns
where TABLE_SCHEMA = 'db_name' and column_name like '%platform%';
2.在Notepad++中(其他文本编辑器也行),分别粘贴出table_name, column_name 列;
3.长按Alt键,进行列选中,写入如下语句,
ALTER TABLE table_name MODIFY column_name VARCHAR(255);
...
ALTER TABLE table_name MODIFY column_name VARCHAR(255);
注:长度255,不用不会浪费空间,用多少,占多少空间;
4.进入数据库执行即可;这里需要注意,如果线上数据量很大,则执行时间很长;我执行的结果仅做参考:21万数据量的表 25秒执行完毕,50张表就可想而知了;
最后总结
如果线上存在几百万数据的表,建议说服需求方,把11位长度的值修改为10以内更为合理!