Oracle的五种约束,序列,视图,集合操作

一。Not null   定义在表的列上,表明该列必须要有值,不能为null
可以在建立表的时候说明    也可以在表建立后修改为not null
可以给约束指定名称。如果不指定名称,数据库会给一个系统自动指定名称,SYS_C#######
User_constraints,user_cons_columns可以查看到约束的信息

create table t1 (name char(9) not null,
telenum char(8) constraint t1_tele_nl not null);
建立表的时候指明非空约束,一个是系统命名,一个是我们命名。

建立表后指定not null约束。要使用modify语法。你不指定名称,数据库自己命名

alter table t1 modify(dname not null);

二。唯一约束UNIQUE   列的值不能重复  可以为NULL
是用索引来维护唯一的  索引的名称和约束的名称相同
建立表的时候指定UNIQUE约束

create table t1 (name char(9) UNIQUE,
mail char(8) constraint t1_mail_u UNIQUE);

建立表的时候指明唯一约束,一个是系统命名,一个是我们命名。

建立表之后指定UNIQUE约束

alter table t1 add constraint u_dname unique (dname);

三。Check检测约束

Create table t1(name varchar2(8)
check (length(name)>4),
Mail varchar2(10) );

四。Primary key 主健约束   一个表只能有一个主健  主健要求唯一并且非空
可以是联合主健,联合主健每列都要求非空
主健能唯一定位一行,所以主键也叫逻辑rowid  主健不是必需的,可以没有
主健是通过索引实现的  索引的名称和主健名称相同

create table t1(mail char(8) primary key,name char(8));

表建立后指定自命名的主健

alter table t1 add constraint pk_t1_mail primary key (mail) ;

五。foreign key外健  指定在表的列上
引用本表其它列,或其它表的其它列
被引用的列得有唯一约束或者主健约束,因为引用的是索引的键值,而不是真正的表。
目的是维护数据的完整性    核心是一列是另外一列的子集,null除外

建立主健,建立一个外健来引用主健

create table d as select * from dept;
create table e as select * from emp;

alter table d add constraint pk_d primary key (deptNO) ;
alter table e add constraint fk_e foreign key (deptno) references d(deptno) ;

六。 删除约束
任何约束都可以用约束名称来删除
Alter table ### drop constraint ****;
因为主健只能有一个,所以删除主健约束的时候也可以
Alter table ### drop primary key;
如果主健和唯一性约束被删除,自动建立的索引也会同时被清除。
Not Null约束也可以用alter table modify来删除。
删除有外健引用的主健或唯一约束的时候,外健也要被级连删除。
Alter table ### drop primary key cascade;
如果不加cascade,你删不了,报有外键在使用,不能删除。
按约束的名称来删除约束(可以删除各种约束)
Alter table t1 drop constraint sys_c03033;
非空约束的第二种删除方式
alter table t1 modify (name not null);
alter table t1 modify (name null);

七。Sequence序列
序列是一类对象  它可以自动的产生唯一的整数
通常用来产生主健的值  每个用户可以建立多个序列

CREATE SEQUENCE s1
INCREMENT BY 2
START WITH 1
MAXVALUE 10
MINVALUE -10

Select s1.nextval from dual;取序列s1的下一个值。
Select s1.currval from dual; 取序列s1的当前值。

当序列没有值在内存中时,currval属性无效,先nextval后,才会有效

修改序列
序列的当前值一定得在最大和最小之间
步长不能为零
alter SEQUENCE s1 INCREMENT BY -2;

删除序列
Drop sequence s1;
一旦被删除,就不可以再引用序列的值。

八。View视图
使用视图为了我们的方便  增加了数据库的负担
视图下降数据库的性能  视图是查询语句的别名
视图的定义存在于数据字典中

create view v1
as select deptno,min(sal) salary from emp group by deptno

视图v1只是一个定义,没有独立的数据,数据还是存放在emp表中

修改视图
Create or replace view v1 as select * from dept;  就是将视图的定义替换

删除视图   Drop view v1;
在数据字典中将视图的定义清除   不影响基本表中的数据

九。集合操作
并集union /union all
交集INTERSECT
补集MINUS

select * from t1     union all   select * from t2;

将t1的结果和t2的结果联合显示。不排序操作,也不去掉重复的行。

select * from t1  union  select * from t2;

将t1的结果和t2的结果联合显示。含有排序操作,也去掉重复的行

select * from t1   INTERSECT  select * from t2;

将t1的结果和t2的结果的共有部分显示。含有排序操作,也去掉重复的行

select * from t1   MINUS   select * from t2;

T1表有,而t2表没有的行,去掉重复的行。

select * from t2  MINUS  select * from t1  t2表有,而t1表没有的行,去掉重复的行。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值