Oracle修改字段属性

关于Oracle修改字段属性

今天项目上需要将数据库中的一个字段改为可为空,我清楚的记得Oracle修改字段属性的话都是需要将字段数据清空的,字段上有数据的话就不可更改字段属性,但是老大看到我的脚本后,问了一句修改为可空需要这么麻烦吗?我解释了一下,老大说不需要,直接改就可以,然后我试了一下真的可以,猜想可能是版本区别或者当初我记错了?哈哈哈,不再深究,在此只整理记录各属性修改条件以及修改的语句。

Oracle中的字段属性主要就是五种:

  1. 字段名称
  2. 字段数据类型和长度
  3. 字段是否可为空
  4. 默认值
  5. 注释
修改字段名称
--无论列是否有数据,都可以直接执行:
ALTER TABLE TABLE_NAME(表名) RENAME COLUMN TB_NAME_OLD(旧的字段名) TO TB_NAME_NEW(新的字段名);
修改字段数据类型和长度
1. 假设列数据为空,则不管改为什么字段类型,都可以直接执行:
ALTER TABLE TABLE_NAME(表名) MODIFY TB_NAME(字段名) DATA_TYPR(数据类型);

2. 假设列数据不为空,则需要将目标列置空后再修改:
-- TABLE_NAME(表名) TB_NAME(列名) DATA_TYPE(数据类型)
ALTER TABLE TABLE_NAME ADD TB_NAME_TEMP DATA_TYPE;  --增加临时列
UPDATE TABLE_NAME SET TB_NAME_TEMP = TB_NAME;       --备份要目标列的数据
UPDATE TABLE_NAME SET TB_NAME = NULL;               --将目标列置空
ALTER TABLE TABLE_NAME MODIFY TB_NAME DATA_TYPE;    --修改目标列的数据类型
UPDATE TABLE_NAME SET TB_NAME = TB_NAME_TEMP;       --将数据恢复至目标列
ALTER TABLE TABLE_NAME DROP COLUMN TB_NAME_TEMP;    --删除临时列

3. 特例
   a. 修改字段类型为NVARCHAR2等类型,不管有没有数据都可以直接执行修改语句;
   	  NVARCHAR2这种类型,使用较少,详情可参见大佬的 https://www.darkathena.top/archives/about-nvarchar2-and-national-charset,不再赘述
   b. 仅改变字段长度,不管有没有数据都可以直接执行修改语句;
   c. 在进行2中的操作时,不同的数据类型需要转换,Oracle 数据类型转换的函数可参见大佬的 https://blog.csdn.net/qq_45941597/article/details/124598254,不再赘述
修改字段是否可为空
1. 将不可为空的列改为可为空,无论有没有数据都可以直接执行:
ALTER TABLE TABLE_NAME(表名) MODIFY TB_NAME(目标列名) NULL;
2. 将可为空的列修改为不可为空,必须保证字段不存在空值时才可执行:
ALTER TABLE TABLE_NAME(表名) MODIFY TB_NAME(目标列名) NOT NULL;
修改字段默认值
1. 修改或增加列的默认值,无论字段有没有数据都可以直接执行:
ALTER TABLE TABLE_NAME(表名) MODIFY TB_NAME(列名) DEFAULT DEFAULT_VALUE(默认值);  --新增或修改的默认值,只有插入新数据时才生效
2. 删除列的默认值,无论字段有没有数据都可以直接执行:
ALTER TABLE TABLE_NAME(表名) MODIFY TB_NAME(列名) DEFAULT NULL;
修改字段注释
-- TABLE_NAME(表名) TB_NAME(列名) COM_CON(注释内容)
1. 修改和增加字段注释,无论有没有数据都可以直接执行:
COMMENT ON COLUMN TABLE_NAME.TB_NAME IS COM_CON;
2. 删除字段注释,无论有没有数据都可以直接执行:
COMMENT ON COLUMN TABLE_NAME.TB_NAME IS NULL;

 
 
 

看到这里了,有用没用点个赞呗!🤞🏻🤞🏻🤞🏻

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值