Oracle修改字段长度及属性

oracle · 浏览次数 : 0

小编点评

| ID | STUID | STUNAME | SEX | AGE | CLASSNO | STUADDRESS | GRADE | ENROLDATE | IDNUMBER | status | |---|---|---|---|---|---|---|---|---|---|---| | 1 | SC200101007 | 罗宾 | 1 | 30 | C200101 | 南海 | 2001/09/01 | 411428199602569207 | SC200101008 | 弗兰奇 | 1 | 34 | C200101 | 鱼人岛 | 2001/09/01 | 411428199602569208 | | 2 | SC200101009 | 布鲁克 | 1 | 63 | C200101 | 西海 | 2001/09/01 | 411428199602569209 | SC200101010 | 甚平 | 1 | 46 | C200101 | 鱼人岛 | 2001/09/01 | 411428199602569210 | | 3 | SC200101011 |萨博 | 1 | 46 | C200101 | 鱼人岛 | 2000/09/01 | 411428199602569211 | SC200101012 |

正文

首发微信公众号:SQL数据库运维

原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247486117&idx=1&sn=02e2cd05e5db7eaa5758c70e81cf3972&chksm=ea375ed5dd40d7c367727562bdb00788f3bd139cbbda377f599586a47ce13ad9d04c56fd4d2d&token=1479964665&lang=zh_CN#rd


Oracle数据库使用ALTER TABLE MODIFY语法,修改列定义。
语法
alter table table_name modify(column_name 字段类型);

Oracle允许执行多种操作,但主要有以下常用的操作:

  • 修改数据列的可见性(可见或不可见)

  • 修改字段允许或不允许null

  • 修改字段长度

  • 修改列的默认值

     

修改多个列语法如下:

ALTER TABLE table_nameMODIFY (    column_name_1 字段类型,    column_name_2 字段类型,    ...);

 

举例,仍然使用之前建立的数据库表及数据进行测试:Oracle中新建数据表的两种方法(点击前边文字跳转)不了解的自行跳转链接查看,这里就在列下建表及插入数据语句如下:

--实例建表stuinfo_01create table JT_CS.stuinfo_01(  stuid      varchar2(11) not null,--学号:'S'+班号(7位数)+学生序号(3位数)(不能为空)SC200101001  stuname    varchar2(50) not null,--学生姓名(不能为空)  sex        char(1) not null,--性别(不能为空)1(男)、2(女)  age        number(2) not null,--年龄(不能为空)  classno    varchar2(7) not null,--班号:'C'+年级(4位数)+班级序号(2位数)(不能为空)C200101  stuaddress varchar2(100) default '地址未录入',--地址 (不填或为空时默认填入‘地址未录入‘)  grade      char(4) not null,--年级(不能为空)  enroldate  date,--入学时间  idnumber   varchar2(18) default '身份证未采集' not null--身份证(不能为空))
--插入测试数据INSERT INTO JT_CS.STUINFO VALUES ('SC200101001','路飞','1','19','C200101','东海哥亚王国风车村','2001','2001/09/01','411428199602569201');INSERT INTO JT_CS.STUINFO VALUES ('SC200101002','索隆','1','21','C200101','东海霜月村','2001','2001/09/01','411428199602569202');INSERT INTO JT_CS.STUINFO VALUES ('SC200101003','娜美','2','20','C200101','可可西亚村','2001','2001/09/01','411428199602569203');INSERT INTO JT_CS.STUINFO VALUES ('SC200101004','乌索普','1','19','C200101','东海西罗布村','2001','2001/09/01','411428199602569204');INSERT INTO JT_CS.STUINFO VALUES ('SC200101005','山治','1','21','C200101','北海杰尔玛王国','2001','2001/09/01','411428199602569205');INSERT INTO JT_CS.STUINFO VALUES ('SC200101006','乔巴','1','15','C200101','磁鼓岛','2001','2001/09/01','411428199602569206');INSERT INTO JT_CS.STUINFO VALUES ('SC200101007','罗宾','2','30','C200101','奥哈拉','2001','2001/09/01','411428199602569207');INSERT INTO JT_CS.STUINFO VALUES ('SC200101008','弗兰奇','1','34','C200101','南海','2001','2001/09/01','411428199602569208');INSERT INTO JT_CS.STUINFO VALUES ('SC200101009','布鲁克','1','63','C200101','西海','2001','2001/09/01','411428199602569209');INSERT INTO JT_CS.STUINFO VALUES ('SC200101010','甚平','1','46','C200101','鱼人岛','2001','2001/09/01','411428199602569210');

查询结果数据如下:

SELECT * FROM JT_CS.STUINFO_01;

  

 


 

1、修改数据列的可见性(可见或不可见)

通常默认情况下,新建表在未有任何定义的情况下表列都是可见的。我们可以在创建表或使用ALTER TABLE MODIFY语句定义某些列不可见

--以下语句将SEX列修改为不可见(适用于Oracle 12c)ALTER TABLE JT_CS.STUINFO_01 MODIFY SEX INVISIBLE;
--将不可见字段修改为可见(适用于Oracle 12c)ALTER TABLE JT_CS.STUINFO_01 MODIFY SEX VISIBLE;

2. 修改字段允许或不允许null

准备测试数据(先制造出一个小问题)

--测试需要,先将原来的enroldate字段路飞的入学时间置空UPDATE  JT_CS.STUINFO_01 SET enroldate='' WHERE STUID='SC200101001';

修改enroldate字段不予许为空 not null

--修改enroldate字段不予许为空 not nullALTER TABLE JT_CS.STUINFO_01 MODIFY enroldate  NOT NULL;

因为刚刚我们清空了“路飞”先生的入学时间,所以执行NOTNULL时系统提示错误,有空值存在,也就是说必须确保现有数据符合新约束(也就是说,如果原来数据中存在NULL是不行的)。

 为了解决这个问题,首先我们需要将enroldate字段所有为空的列进行填充

--更新填充字段UPDATE     JT_CS.STUINFO_01SET     enroldate='2001-09-30' WHERE STUID='SC200101001' ;

然后改变enroldate列的约束:

--修改约束不允许为空(not null)    ALTER TABLE JT_CS.STUINFO_01 MODIFY enroldate  NOT NULL;

3. 修改字段长度

--将身份证号字段长度大小扩充到20ALTER TABLE JT_CS.STUINFO_01 MODIFY IDNUMBER VARCHAR2(20);

注意:要缩短或扩充列的大小,请确保列中的所有数据都符合新的大小,否则语句将无法进行执行。

4. 修改列的默认值

添加一个名为status的新列,默认值为1到JT_CS.STUINFO_01表中

--添加一个新列,然后默认值设置成 1ALTER TABLE JT_CS.STUINFO_01 ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;

 将添加的新列status的默认值修改为0

--设置成默认值0ALTER TABLE JT_CS.STUINFO_01 MODIFY status DEFAULT 0;

插入一条新数据进行测试

--按指定的字段插入数据INSERT INTO JT_CS.STUINFO_01 ( STUID, STUNAME, SEX, AGE, CLASSNO, STUADDRESS, GRADE, ENROLDATE, IDNUMBER) VALUES ('SC200101011','萨博','1','46','C200101','鱼人岛','2000','2001/09/01','411428199602569211');

结果查询

点击关注“SQL数据库运维”,后台或浏览至公众号文章底部点击“发消息”回复关键字:进群,带你进入高手如云的技术交流群。后台回复关键字:SQL,获取学习资料

动动小手点击加关注呦☟☟☟

与Oracle修改字段长度及属性相似的内容:

Oracle修改字段长度及属性

首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247486117&idx=1&sn=02e2cd05e5db7eaa5758c70e81cf3972&chksm=ea375ed5dd40d7c

RPM安装的Oracle19c 修改init.ora进行修复以及最简单开机启动Oracle的方法

# RPM安装的Oracle19c 修改init.ora进行修复以及最简单开机启动Oracle的方法 ## 背景 ``` 今天开始使用自己心的ThinkBook14 的笔记本 因为已经没有了 Linux测试环境供我使用. 所以我就自己准备导入一个最开始的 OpenEuler2203 + Oracle

[转帖]Oracle 用户密码中包括了“@”字符串的错误提示解决方法

Oracle 用户密码设置了带有“@”符号,正常登陆总是无法登陆,提示无法解析的连接字符串错误 解决办法:1:修改密码:修改密码使密码中不包括@符号;2:增加转义即可,在密码前后增加 \"示例如下: CMD中输入:C:\Users\Administrator> exp system/\"ABC@X1

[转帖]优化Oracle数据库的参数设置原创

https://vip.kingdee.com/article/372401660284519936?productLineId=8 1.登录数据库,创建参数文件备份 2.修改参数 数据库参数修改存在风险,仅供参考 1.登录数据库,创建参数文件备份 sqlplus / as sysdba 用SYSD

使用KVM克隆用于Oracle DB的主机

首先,通过现有的vm1「在上篇文章 使用KVM创建OEL虚拟机 已创建」克隆出一个vm,名字叫做db1,然后修改一些配置,使其更适用于Oracle DB的主机。 1.通过克隆vm1生成db1 2.解决virsh console db1 卡住问题 3.修改配置 CPU、内存、磁盘大小 4.配置局域网y

[转帖]Oracle Linux 9 - Oracle 提供支持 RHEL 兼容发行版

https://sysin.org/blog/oracle-linux-9/ Oracle Linux 是一个开放、全面的操作环境,提供虚拟化、管理、云原生计算工具和操作系统,通过一个统一的支持解决方案满足您的业务需求。Oracle Linux 与 Red Hat Enterprise Linux

[转帖]Oracle数据库的两种授权收费方式详解

https://www.jb51.net/article/265823.htm 现在Oracle有两种授权收费方式,按CPU(Process)数和按用户数(Named User Plus),前一种方式一般用于用户数不确定或者用户数量很大的情况,典型的如互联网环境,这篇文章主要介绍了Oracle数据库

[转帖]Oracle jdk与OpenJdk

https://www.jianshu.com/p/ca5e7f78eb4e ————Oracle JDK———————jdk历史叫Sun Jdk,后来被Oracle收购后现在叫做Oracle JDKOracleJDK由Oracle公司开发维护,该公司是Sun许可证,基于Java标准版规范实现。它以

[转帖]oracle清理临时表空间

https://blog.51cto.com/u_11310506/2357625 为了防止临时表空间无限制的增加,我采用隔一段时间就重建临时表空间的方法,为了方便,我保留两组语句,轮流执行即可, 假定现在临时表空间名称是temp,新建一个tempa表空间,删除temp表空间,方法如下: alter

[转帖]Oracle、MySQL、PG是如何处理数据库“半页写”的问题的?

数据库“断页”是个很有意思的话题,目前任何数据库应该都绕不过去。我们知道数据库的块大小一般是8k、16k、32k,而操作系统块大小是4k,那么在数据库刷内存中的数据页到磁盘上的时候,就有可能中途遭遇类似操作系统异常断电而导致数据页部分写的情况,进而造成数据块损坏,数据块损坏对于某些数据库是致命的,可