Oracle修改字段属性
关于Oracle修改字段属性
今天项目上需要将数据库中的一个字段改为可为空,我清楚的记得Oracle修改字段属性的话都是需要将字段数据清空的,字段上有数据的话就不可更改字段属性,但是老大看到我的脚本后,问了一句修改为可空需要这么麻烦吗?我解释了一下,老大说不需要,直接改就可以,然后我试了一下真的可以,猜想可能是版本区别或者当初我记错了?哈哈哈,不再深究,在此只整理记录各属性修改条件以及修改的语句。
Oracle中的字段属性主要就是五种:
- 字段名称
- 字段数据类型和长度
- 字段是否可为空
- 默认值
- 注释
修改字段名称
--无论列是否有数据,都可以直接执行:
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;
看到这里了,有用没用点个赞呗!🤞🏻🤞🏻🤞🏻