欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-01-28 17:27:46
1. 检查约束是什么 检查约束的作用就是让表中的数据更有意义。检查约束就是为了检测和过滤不符合实际意义的数据,比如说年龄1000,工资-500等这些数据。 2.在创建表时设置检查约束 1)列级检查约...

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. 禁用检查约束。 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

实例
如上一样。