Oracle之检查约束的使用(四)

1. 检查约束是什么

检查约束的作用就是让表中的数据更有意义。检查约束就是为了检测和过滤不符合实际意义的数据,比如说年龄1000,工资-500等这些数据。

2.在创建表时设置检查约束

1)列级检查约束

语法:

CREATE TABLE table_name ( column_name datatype CHECK(expressions)) ;

CHECK 是检查关键字
expressions 是约束的条件
实例:
将salary 设置检查约束,使其>0 。

 create table userinfo_c(
   id varchar2(10)  primary key ,
   username varchar2(20) ,
   salary number(5,0) check(salary>0)) ;

执行
先执行实例,插入语句当 salary<0 的时候报错。

SQL> create table userinfo_c(
  2  id varchar2(10)  primary key ,
  3  username varchar2(20) ,
  4  salary number(5,0) check(salary>0)) ;

表已创建。

SQL> insert into userinfo_c values(1,'shao'-500) ;
insert into userinfo_c values(1,'shao'-500)
            *
第 1 行出现错误:
ORA-00947: 没有足够的值
SQL>

2)表级级检查约束

语法

CONSTRAINT constraint_name CHECK(expressions) 

实例

 create table userinfo_c1(
   id varchar2(10) primary key ,
   username varchar2(20),
   salary number(5,0),
   constraint  ck_salary check(salary>0) );

3.修改表设置检查约束

语法

ADD CONSTRAINT constraint_name CHECK(expressions) 

实例
首先创建一个表

create table userinfo_c2(
id varchar2(10)  primary key, 
username varchar2(20),
salary number(5,0)
) ;

添加检查约束。

alter table userinfo_c2  add constraint ck_salary_new  check(salary>0) ;

4.删除检查约束

1)禁用(启用)检查约束

语法

ALTER TABLE table_name  DISABLE|ENABLE CONSTRAINT constraint_name 

实例

alter table userinfo_c1 disable constraint ck_salary ;

运行
1. 要查看userinfo_1 的禁用状态, 首先 desc user_constraints 看看数据字典的字段, 我们要看CONSTRAINT_NAME , CONSTRAINT_TYPE STATUS 类型。
2. 执行 select constraint_name ,constraint_type, status from user_constraints where table_name=’USERINFO_C1’
;来查看。
3. 禁用检查约束
执行 alter table userinfo_c1 disable constraint constraint名字;

SQL> desc user_constraints
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 OWNER                                              VARCHAR2(30)
 CONSTRAINT_NAME                           NOT NULL VARCHAR2(30)
 CONSTRAINT_TYPE                                    VARCHAR2(1)
 TABLE_NAME                                NOT NULL VARCHAR2(30)
 SEARCH_CONDITION                                   LONG
 R_OWNER                                            VARCHAR2(30)
 R_CONSTRAINT_NAME                                  VARCHAR2(30)
 DELETE_RULE                                        VARCHAR2(9)
 STATUS                                             VARCHAR2(8)
 DEFERRABLE                                         VARCHAR2(14)
 DEFERRED                                           VARCHAR2(9)
 VALIDATED                                          VARCHAR2(13)
 GENERATED                                          VARCHAR2(14)
 BAD                                                VARCHAR2(3)
 RELY                                               VARCHAR2(4)
 LAST_CHANGE                                        DATE
 INDEX_OWNER                                        VARCHAR2(30)
 INDEX_NAME                                         VARCHAR2(30)
 INVALID                                            VARCHAR2(7)
 VIEW_RELATED                                       VARCHAR2(14)

SQL> select constraint_name ,constraint_type,status from user_constraints where table_name='USERINFO_C1' ;

CONSTRAINT_NAME                C STATUS
------------------------------ - --------
CK_SALARY                      C ENABLED
SYS_C0010837                   P ENABLED

SQL> alter table userinfo_c1 disable constraint ck_salary ;

表已更改。

SQL>  select constraint_name ,constraint_type,status from user_constraints where table_name='USERINFO_C1' ;

CONSTRAINT_NAME                C STATUS
------------------------------ - --------
CK_SALARY                      C DISABLED
SYS_C0010837                   P ENABLED

SQL>

2)删除检查约束

语法

ALTER TABLE table_name  DROP CONSTRAINT constraint_name

实例
如上一样。

你可能感兴趣的:(oracle)