很多时候创建表的时候,当时很确定觉得这个字段设为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
很多时候创建表的时候,当时很确定觉得这个字段设为int,或其他类型就行了,结果在后来的业务升级改造过程中,或者为了对接其他系统时候突然发现表中的某个字段要改类型。但是你直接修改字段类型时发现它会提示:无法修改字段类型,请先删除该字段中的值。假如你的表中数据量还不小,你可能的不愿意先将表中的数据导出来,修改好字段类型,再将数据导回去,这样操作没问题,在数据量小于50万,操作还是挺快的。但是当表中数据...
alter table eomsinfo rename column dealTime2 to dealTime22 把原字段换个名字,此条的sql是把dealTime2
换成dealTime22
ALTER TABLE eomsinfo ADD dealTime2 DATE; 在表中添加一个原字段名字dealTime2
,并把
类型
定义自己想改变的
类型
, 此条是定义DATE
由于oracle等
数据
库在表里有
数据
时无法改变字段
类型
,于是使用下列方法,总体思路是:备份原表
数据
,删除表
数据
,
修改
字段
类型
,将备份表的
数据
导入原表,删除备份表,结束。
1、备份表
数据
create table ST_DATA_IMPORT_BAK AS SELECT * FROM ST_DATA_IMPORT;
2、删除表
数据
delete from ST_DATA_IMPORT;
3、...
Oracle的表中已存在了
数据
,这时再来
修改
表的字段
类型
就无法
修改
。例如,
number
类型
改成number(22),这时
数据
库会报ORA-01440: column to be modified must be empty to decrease precision or scale
备份原表
数据
,清除表
数据
,
修改
字段
类型
,还原
数据
// 1.创建备份表
create table test_bak as select * from test;
// 2.清除原表
数据
truncate table
alter table 表名 drop constraint 约束名字 ------说明:删除表的字段的原有约束
alter table 表名 add constraint 约束名字 DEFAULT 默认值 for 字段名称 -------说明:添加一个表的字段的约束并指定默认值
--二、
修改
字段名:
alter table 表名 rename column A...
要把某一字段date型转换为varchar2型(包括字段和
数据
),但是该字段中有值,不能直接
修改
,所以想到这个办法。
alter table TABLE_NAME rename column {要变更字段} to temp;
alter table TABLE_NAME add {要变更字段} {要变更的
类型
} (如想把date转换为var...
有时[比如在Linux服务器下]需要使用SQL语句直接对
数据
表进行新建/
修改
表结构, 填充/更新
数据
等. 或借助
数据
库管理工具执行SQL,但是这种方法,比较适合做微小的操作~
好处:使用SQL去操作,可以避免繁琐, 遗漏, 快捷方便, 一步到位.
其中,table_name是要
修改
的表名,column_name是要
修改
类型
的字段名,new_data_type是新的
数据
类型
。
例如,将表employee中的salary字段
类型
从INT
修改
为DECIMAL(10,2),可以执行以下命令:
ALTER TABLE employee MODIFY salary DECIMAL(10,2);
3. 使用DESC命令再次查看表的结构,确认字段
类型
已经
修改
成功。