在有数据的情况下修改表字段的类型

  • Post author:
  • Post category:其他


很多时候创建表的时候,当时很确定觉得这个字段设为int,或其他类型就行了,结果在后来的业务升级改造过程中,或者为了对接其他系统时候突然发现表中的某个字段要改类型。但是你直接修改字段类型时发现它会提示:无法修改字段类型,请先删除该字段中的值。假如你的表中数据量还不小,你可能的不愿意先将表中的数据导出来,修改好字段类型,再将数据导回去,这样操作没问题,在数据量小于50万,操作还是挺快的。但是当表中数据几百上千万条,而且还不止一个表,这时这个方法内心是抗拒的,看看上帝是怎么拯救世人的。

由于公司的项目和银行对接,提升系统与银行系统的交互性,一些数据要保持一致。然后就交给我一个小任务,就是把老数据替换为他们所提供的数据,也就某个下拉框中百十条数据的转换。很小的一个活,我就去做了。

拿到数据后就去数据库看对应的表没问题,写了个小程序,跑一下生成insert语句,删除原数据,然后insert执行,数据做完了。肯定不止这一个表啦,这是个主表。刚好之前我做好了数据字典,直接去检索所有使用到的表,检索到第一张表我就傻了!主表主键是Varchar2,这里是number,心中万马奔腾!而且查到6张表都是这样,只有一张表是可以直接转换的。我如上了厨房灶台的老鼠,所过之处弥漫的味道越来与复杂,因为要把数据替换,先是数据库,然后是对应项目系统代码中实体类都要改,改完还要测,临近上生产测试环境…

没办法再说当初设计数据库太随意,那人早已不知在哪里了。我记得在之前学习数据库课程的时候有注意到有个语句可以修改表字段的名字,一瞬间一个不错的方法闪现!先把这个字段改个名字,然后在添加个新字段为原来的名字,把数据转移过去行了!

alter table 表名 rename column name to newName;

alter table 表名 add name varchar2;

然后我这么干,果然很快就把任务干完了,接着测试系统,还好没有多大问题,改改也就没有多什么问题了。

通过这些事情其实也就是在面对一些看似遇到麻烦的问题,其实当你努力想想办法,通过自己掌握的知识,或者去百度百度,通过集思广益,最终这个“麻烦”也想戳破的气球。之前也遇到这种棘手问题,那时候是在一家大型公司实习,为保险开发软件,慢慢熟悉保险的操作流程,慢慢也算融入了项目组,又一次项目老大让我查一下核保查询页面的查询语句,然后给他。我当时就去页面上去查了,看着一个个条件,就这些么,关键要sql语句,我还得一个个对应到表中的字段,而且关联那些表我还不知道,这该怎么办,还让我半小时给他!

当时就郁闷了,这可得仔仔细细一个个统计了写了。但转念一想,这查询都做好了,我还写它干啥子,何不利用!呵呵!

我就先找到查询的地方,打个断点,由于是hql语句,也没看出来什么输出,我就写个方法中间插一脚,打印输出一下,输出后惊呆了,密密麻麻的可打印两三页A4纸了,这是在开玩笑么!不到二十分钟就交给老大了。

我挺喜欢寻巧方法的,下次有机会分享一下我是怎么编写数据字典做到事半功倍的。

欢迎转载,转载请注明:

http://www.javasourceshare.cn/article/18