Oracle 非空约束
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle 非空约束
非空约束就是限制必须为某个列提供值。空值是不存在的,它即不是数字0,也不是空字符串,而是没有、未知。
在表中,当某些字段的值是不缺少的,那么就可以为该列定义为非空约束。这样当插入数据时,如果没有为该列提供数据,那么系统就会出现一个错误消息。
如果某些列的值是可有可无的,那么可以定义这些列允许空值。这样,在插入数据时,就可以不向该列提供具体的数据。在默认情况下,表中的列是允许空值的。
例如,在创建EMPLOYEES表时,规定EMPNO、ENAME和DEPTNO列不能为空值:SQL> create table employees(
2 empno number(10) not null,
3 ename varchar2(20) not null,
4 sex char(2),
5 salary number(8,2),
6 hiredate date default sysdate,
7 job varchar2(10),
8 email varchar2(50),
9 deptno number(3) not null);
表已创建。
也可以使用ALTER TABLE MODIFY语句为已经创建的表删除或重新定义NOT NULL 约束。例如,下面的语句为SALARY字段定义了非空约束:
SQL> alter table employees
2 modify salary not null;
表已更改。
在为表中的字段定义了非空约束后,当用户向表插入数据时,如果未向对应的字段提供值,则添加数据操作将返回一个如下所示的错误:
SQL> insert into employees(ename,sex,salary,deptno)
2 values('刘丽','男',1500,20);
insert into employees(ename,sex,salary,deptno)
*
第 1 行出现错误:
ORA-01400: 无法将NULL 插入("SCOTT"."EMPLOYEES"."EMPNO")
如果使用ALTER TABLE … MODIFY为表添加NOT NULL约束,并且表中该列的数据已经存在NULL值,则向该列添加NOT NULL约束将失败。这是因为当为该列应用非空约束时,Oracle将会试图检查表中的所有的行,以验证所有行在对应的列是否存在NULL值。
使用ALTER TABLE … MODIFY语句还可以删除表中非空约束。例如,下面的语句删除了SALARY列的非空约束:
SQL> alter table employees
2 modify salary null;
表已更改。