约束2

我们接着讲添加约束的语法,刚才我们讲是创建约束,就是我们在创建表的同时,

来给你创建这个约束,我们这个内容,创建表的同时来创建这个约束,那么表已经创建好以后,

我能不能后期对这个表进行一个修改啊,可以,可以来修改这个约束,当然这个修改得加上一个双引号,

它是一个泛泛的我们称之为修改,并不是真正的修改,你看这里有说明

我可以添加或删除约束,但是不能够修改约束,因为没有提供相应的命令,你只能添加或删除,

这是一组,还有一组叫有效化或无效化约束,这个约束我先不删除你,只是让你无效化,然后再让你使用,

就是这个意思,有效化或无效化约束,这里有一个说,添加not null约束,要使用modify,他永远都特别特殊,

他呢如果你要是添加的话,下面就是我们的例子了,我们看一看,刚才我们创建了好多表,这些表也创建了相应的

一些约束,我们在这个表创建的基础之上,来添加或修改这些约束,我们现在举个例子吧,emp5,这个表有主键,

有唯一性约束,没有外键,有unique约束,我们看一下这个表的结构

desc emp5;

这个表一共有四项,这是一个主键,name这是一个not null的,email这里有一个限制,salary这里没有限制,

salary这里的number类型的,他限制的话,让你这个是非空的,那你这个salary是不是得用modify,修改还是用的alter,

alter table emp5,modify,你看我怎么写,你这里操作的是不是salary,然后呢,他还是number类型的,这个都不变,

后边给他加上一个not null,这个自然就有了一个非空的约束

alter table emp5

modify(salary number(10,2) not null)

添加成功,然后你在desc emp5,你看

desc emp5;

这里的Y就没有了,刚才这里还有,说明这个约束我添加成功,这就叫添加一个约束,然后我删除一个约束吧,

比如这里面的这个email,email有个约束,我们直接看desc看不出来,当然这个也一样,我这里刷新一下,

看一下我们刚才这个,check这里是不是多了一个约束

用了一个默认的一个命名,用了一个规则,我想把name这个约束给他删除掉,删除,删除的话我们使用的是drop,

就像我们删除一个列一样,我们使用的是drop,删列的话我们叫drop column,约束就是constraint,那么怎么指明

你删除的这个约束,我用的是这个约束名,你看这个约束名怎么写的,写到这儿来,emp5_name_nn,这样来删除这样

一个约束

alter table emp5

drop constraint emp5_name_nn

删除以后你再来看,check是不是就没有了

这就说明我们确实给他删除成功了,删除成功你看这个,这个我们要是删除他的话,那你是不是就得用这个名啊,

确实是这样的,你就是按照他这个名来命名的,sys_c005521

alter table emp5

drop constraint sys_c005521

这个也删了,你再看这里也没了,这里就没有了,是吧

那你不想添加非空了,你想添加unique的约束,unique唯一的,添加唯一的约束,

或者主键外键啊,这个type啊,利用的还是叫add,只有not null使用的是modify,add constraint我用的是unique,

给这个name吧,name没有unique,我给这个name添加unique的约束,add constraint emp5,下划线,name_uk,unique,

然后你作用在哪一个列上,name上,这个是不是有点像表级约束的写法

alter table emp5

add constraint emp5_name_uk unique(name)

然后我们看一下,unique,这里是不是多了一个name,这是我们讲的修改的一种方式,添加或删除

后面还有一个有效化或无效化约束,有效化或无效化我们看看什么意思,先看看这个无效化,在alter table 

语句当中,可以使用叫disable字句,将约束无效化,什么意思啊,我以not null为列吧,我们再换一个看看,

unique,check,这个是not null的,我们用哪个都可以,看这两个,我先看这个表里面有没有数据

select * from emp3;

这个表还有三个数据,然后现在我往这个表里去插入数据的时候,你看看,insert into emp3,

values,这个主键这,主键没有,这个我给他避开吧,这里面有两个unique,一个是ID,一个是email,

现在我ID我用1004了,有一个name,有一个非空的约束,DD,email是unique的,我改成这个,3000,

大家你说我这个时候往里面插入能不能进去啊,显然不能,因为email有一个unique约束,这样因为重了

insert into emp3

values(1004,'DD','AA@126.com',3000)

违反唯一性约束条件,这个很自然,然后我们进行这样一个操作命令,alter table emp3,

我们这里叫disable,constraint,constraint谁,叫emp3_email_uk

alter table emp3

disable constraint emp3_email_uk

改了,我们把这个改成disable了,我们刷新一下你看看,大家你看,这个时候这个约束并没有给删除,

所以他不与drop,但是他变成一个灰色了,表示他现在没有起作用,没有起作用那就是言外之意,当我再往表里

再去给你插入这样一条数据的话,已经存在了,看看我能不能够插入成功

insert into emp3

values(1004,'DD','AA@126.com',3000)

给你插入这个数据的话,已经存在了,你看看我能不能插入成功,是不是可以啊

说明他现在确实是失效了,他确实是失效了,那么他失效以后,我怎么让他有效啊,那就alter table emp3,

enable constraint,emp3_email_uk,你看我能不能行

alter table emp3

enable constraint emp3_email_uk;

你看他说不行,说无法验证他,因为找到重复的关键字,这个是什么情况啊

select * from emp3;

是不是这个意思,我现在想把它置成一个unique的,但是你这里面存在一个重复的,存在一些重复的,

我就没法往里加了,那只要你这个不存在的话,才能够加,所以这个数据我得处理一下,处理的话你可以把它删了,

可以update一下,我就直接先删了吧

delete from emp3 where id = 1004;

删了

删了以后呢,我再去给他enable,你看这个时候,是不是就可以了

alter table emp3

enable constraint emp3_email_uk;

是不是就可以了,那他现在又起作用了,好了对吧

那么这个讲完以后,实际上我们整个内容就讲完了,后面有一个查询约束,和查询定义约束的列,

刚才其实我们是通过图像化界面的方式,你要是通过代码来查询的话,可以用的是这样的一个命令,

大家你了解一下就可以了,你看看大概的意思,含有的约束名,约束的类型,约束的条件,从user_constraints这个

表当中,table的名字就叫他,如果你想查询其他的表,只需要改一下employees这个内容就可以了,我看看employess表

中的约束

select constraint_name,constraint_type,search_condition

from user_constraints

where table_name = 'EMPLOYEES'

就这么多,这是这个,然后我还可以查询这个约束定义的列是什么,用的是这个命令

SELECT	constraint_name, column_name
FROM	user_cons_columns
WHERE	table_name = 'EMPLOYEES';

这个是你约束的名,那你这个约束的名是加在哪个列上的,你可以使用这样一个命令,

我们在这也可以看,在这是叫图形化界面的方式,我点一点就完了,这个就通过代码

这个我们讲完的话,我们这一节就说完了,大家重点就掌握这五个关键字,如何在定义当中进行一个

创建,修改的话有点类似于我们之前讲的alter table,修改表一样了,大家你也给他学习一下

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值