一。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表没有的行,去掉重复的行。