加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)

(2017-02-09 14:37:24)
标签:

学习

交流

分类: Oracle初步学习

一、删除约束:drop

1Alter table 表名称

Drop constraint 约束名称;

2)使用cascade选项将相关的约束也删除;

1

假设有表a

select * from a;

http://s3/mw690/002ZiCFRzy78EbNnov8e2&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

其中:id number,name varchar2(20),

salary number,constraint a_id_pk primary key (id),

constraint a_salary_check check (salary >1000)

插入数据验证:

 

1insert into a values(1,'张三',1500);显示如下错误:

http://s14/mw690/002ZiCFRzy78EbOP473ed&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

2insert into a values(4,'赵六',700); 显示如下错误:

http://s12/mw690/002ZiCFRzy78EbQzXmP3b&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

创建表a1并插入数据:

create table a1(id1 number,

name1 varchar2(20),

salary1 number,

constraint a1_id1_fk foreign key (id1)

references a(id));

insert into a1 values(1,'zhangsan',1500);

insert into a1 values(null,'zhaoliu',4000);

 

查询表a1

 

select * from a1;

http://s13/mw690/002ZiCFRzy78EbSooA45c&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

(1)   删除表aid列的主键约束:

alter table a

drop constraint a_id_pk;

显示如下错误:

http://s3/mw690/002ZiCFRzy78EbTKrrYd2&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

修正:alter table a

drop constraint a_id_pk  cascade;

插入数据验证:

insert into a values(1,'张五',1500);

 

select * from a;

http://s3/mw690/002ZiCFRzy78EbUYqXM22&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

此时对于表a1:

insert into a1 values(6,'zz',5500);

 

select * from a1;

http://s5/mw690/002ZiCFRzy78EbWidAUd4&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

(2)   再删除表asalary列的条件约束:

alter table a

drop constraint a_salary_check;

插入数据验证:

insert into a values(4,'赵六',700);

 

select * from a;

http://s14/mw690/002ZiCFRzy78EbXpZeJ0d&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

二、无效化约束:

1,在alter table 中使用disable 子句将约束无效化;

2,使用cascade选项将相关的约束也无效化;

Alter table 表名称

disable constraint 约束名称;

假设有表a:

 

select * from a;

http://s6/mw690/002ZiCFRzy78EbZf6Op45&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

其中:id number,name varchar2(20),

salary number,constraint a_id_pk primary key (id),

constraint a_salary_check check (salary >1000)

创建表a1并插入数据:

create table a1(id1 number,

name1 varchar2(20),

salary1 number,

constraint a1_id1_fk foreign key (id1)

references a(id));

 

insert into a1 values(1,'zhaoliu',4000);

 

select * from a1;

http://s10/mw690/002ZiCFRzy78Ec0NxKpb9&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

(1)   使用disable将表aid列约束无效化:

alter table a

 

disable constraint a_id_pk;显示如下错误:

http://s8/mw690/002ZiCFRzy78Ec29U2jc7&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

修正:alter table a

disable constraint a_id_pk  cascade;

插入数据验证:表a:

insert into a values(1,'张五',5500);

 

select * from a;

http://s5/mw690/002ZiCFRzy78Ec3pcY4a4&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

插入数据验证:表a1:

insert into a1 values(6,'zz',5500);

 

select * from a1;

http://s11/mw690/002ZiCFRzy78Ec4IyOS3a&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

2)使用disable再将表asalary列约束无效化:

alter table a

disable constraint a_salary_check;

插入数据验证:表a:
insert into a values(4,'赵六',700);

 

select * from a;

http://s9/mw690/002ZiCFRzy78Ec5YfFK48&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

即:删除主键约束或者使主键约束无效化时,若主键约束的列涉及到从表的外键约束,则删除或者无效化主键约束时,要加上cascade

三、激活约束:enable子句将当前无效的约束激活;

 

Alter table 表名称

Enable constraint 约束名称;

注意:当unique 或者primary key 约束生效或者失效时,系统自动创建或者删除uniqu索引;

若约束条件生效,则表中所有数据要满足约束条件。

假设有表a

 

select * from a;

http://s16/mw690/002ZiCFRzy78Ec7Sjwj5f&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

其中:id number,name varchar2(20),

salary number,constraint a_id_pk primary key (id),

constraint a_salary_check check (salary >1000)

创建表a1并插入数据:

create table a1(id1 number,

name1 varchar2(20),

salary1 number,

constraint a1_id1_fk foreign key (id1)

references a(id));

insert into a1 values(1,'zhaoliu',4000);

查询表a1:

 

select * from a1;

http://s9/mw690/002ZiCFRzy78EccTIeIc8&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

将表a及表a1中约束无效化:

alter table a

disable constraint a_id_pk  cascade;

alter table a

disable constraint a_salary_check;

alter table a1

disable constraint a1_id1_fk;

插入数据验证:

a:

insert into a values(1,'zhangsan',3000);

 

select * from a;

http://s12/mw690/002ZiCFRzy78Ecf4QUbbb&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

a1:

insert into a1 values(4,'赵六',700);

 

select * from a1;

http://s9/mw690/002ZiCFRzy78Ecgh3scd8&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

(1) 激活表aid约束:

alter table a

 

enable constraint a_id_pk ;显示如下错误:因为上述中表aid列已有重复数据:

http://s8/mw690/002ZiCFRzy78EchFtMH87&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

激活asalary列约束:

alter table a

enable constraint a_salary_check;

插入数据验证:

 

insert into a values(4,'lisi',800);显示如下错误:

http://s10/mw690/002ZiCFRzy78EciVSQx69&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

(2) 激活表a1约束:

 

alter table a1  enable constraint a1_id1_fk;显示如下错误:

http://s2/mw690/002ZiCFRzy78EcmIodb11&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

四、及连约束:删除列时列的约束问题

1cascade constraints 子句在drop column子句中的应用;

2,在删除表的列时,cascade constraints 子句指定将相关的约束一起删除;

3,在删除表的列时,cascade constraints 子句同时也将删除多列约束;

1:假设有表a

 

select * from a;

http://s11/mw690/002ZiCFRzy78EcpxsJI8a&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

其中:id number,name varchar2(20),

salary number,constraint a_id_pk primary key (id),

constraint a_salary_check check (salary >1000)

创建表a1并插入数据:

create table a1(id1 number,

name1 varchar2(20),

salary1 number,

constraint a1_id1_fk foreign key (id1)

references a(id));

insert into a1 values(1,'zhaoliu',4000);

 

select * from a1;

http://s6/mw690/002ZiCFRzy78EcqVDxj05&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

(1)  删除表a中的主键约束id列:

alter table a

drop column id;显示如下错误:

http://s2/mw690/002ZiCFRzy78Ecsm8Yp51&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

修正:

alter table a

drop column id CASCADE CONSTRAINTS ;

查询表a:

 

select * from a;

http://s9/mw690/002ZiCFRzy78EctFLcsc8&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

查询表a的约束:

Select constraint_name,column_name from user_cons_columns

 

Where table_name='A';

http://s8/mw690/002ZiCFRzy78EcuX4Cre7&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

查询表a1

 

select * from a1;

http://s16/mw690/002ZiCFRzy78EcwofZZff&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

查询表a1的约束:

Select constraint_name,column_name from user_cons_columns

 

Where table_name='A1';

http://s5/mw690/002ZiCFRzy78Ecy2eG0f4&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

插入数据验证:表a1:

insert into a1 values(4,'赵六',700);

 

select * from a1;

http://s5/mw690/002ZiCFRzy78EcC2CYA14&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

若某列为主键约束的列,则删除某列之后,某列相应的主键约束也删除,若使用cascade constraint ,则将从表的外键约束也删除;

(2)  删除表a中的条件约束salary列:

在上述(1)操作了的基础上:

alter table a

drop column salary;

查询表a:

 

select * from a;

http://s8/mw690/002ZiCFRzy78EcGJgTd57&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

查询表a的约束:

Select constraint_name,column_name from user_cons_columns

 

Where table_name='A';

http://s11/mw690/002ZiCFRzy78EcHVuxY1a&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

(3)  删除表a1中的外键约束id列:在不删除主键列的基础上进行操作

alter table a1

drop column id1;

 

select * from a1;

http://s3/mw690/002ZiCFRzy78EcJl09ce2&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

此时查询表a1的约束:

Select constraint_name,column_name from user_cons_columns

 

Where table_name='A1';

http://s4/mw690/002ZiCFRzy78EcKMdRp03&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

4假设有表a

 

select * from a;

http://s11/mw690/002ZiCFRzy78EcM34xk8a&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

其中:id number,name varchar2(20),

salary number,constraint a_id_pk primary key (id,name)

删除表aid列:

alter table a

 

drop column id;

http://s13/mw690/002ZiCFRzy78Ef4SgUc8c&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

修正:alter table a

drop column id  cascade constraints ;

 

select * from a;

http://s4/mw690/002ZiCFRzy78Ef5YPhFa3&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

查询表a的约束:
Select constraint_name,column_name from user_cons_columns

 

Where table_name='A';

http://s7/mw690/002ZiCFRzy78Ef887A236&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle 数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" />

若表中几列共用一个约束,只删除其中的一列时,直接不能删除一列,需使用cascade constraints,同时将此列与其他列共同的约束也删除。

五、查询约束:

查询用户的某个表的所有约束:
select constraint_name,constraint_type,search_condition

From user_constraints

Where table_name=’表名称大写’;

-- constraint_name:约束名称;

-- constraint_type:约束类型;

-- search_condition:约束详细明细;

查询定义约束的列:

Select constraint_name,column_name from user_cons_columns

Where table_name=’表名称大写’;

例:

select constraint_name,constraint_type,search_condition

From user_constraints

Where table_name='A';

Select constraint_name,column_name from user_cons_columns

 

Where table_name='A';


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有