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

标签:
学习交流 |
分类: Oracle初步学习 |
一、删除约束:drop
(1)Alter 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)
插入数据验证:
(1)insert into a values(1,'张三',1500);显示如下错误:
http://s14/mw690/002ZiCFRzy78EbOP473ed&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle
(2)insert 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)
alter table a
drop constraint a_id_pk;
显示如下错误:
http://s3/mw690/002ZiCFRzy78EbTKrrYd2&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle
修正:alter table a
drop constraint a_id_pk
插入数据验证:
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)
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)
alter table a
disable constraint a_id_pk;显示如下错误:
http://s8/mw690/002ZiCFRzy78Ec29U2jc7&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle
修正:alter table a
disable constraint a_id_pk
插入数据验证:表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再将表a中salary列约束无效化:
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
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) 激活表a中id约束:
alter table a
enable constraint a_id_pk ;显示如下错误:因为上述中表a的id列已有重复数据:
http://s8/mw690/002ZiCFRzy78EchFtMH87&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle
激活a中salary列约束:
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
http://s2/mw690/002ZiCFRzy78EcmIodb11&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle
四、及连约束:删除列时列的约束问题
1,cascade 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)
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)
在上述(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)
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)
删除表a的id列:
alter table a
drop column id;
http://s13/mw690/002ZiCFRzy78Ef4SgUc8c&690数据库—数据库语言(删除、无效化、激活、及连约束、查询约束)" TITLE="Oracle
修正:alter table a
drop
column id
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';