oracle学习篇八:约束
2016-06-30 22:50
399 查看
----约束-------
--1.主键约束
--唯一标识,不能为空,通常用于ID
--1>创建主键
create table person(
id varchar2(20) primary key,
name varchar2(50),
birthday date,
sex varchar2(2) default '男'
);
insert into person(id,name,birthday,sex)
values(1,'zhangsan',to_date('1988-05-11','yyyy-mm-dd'),'男');
select * from person;
insert into person(id,name,birthday,sex)
values(1,'zhangsan',to_date('1988-05-11','yyyy-mm-dd'),'男');
--2>创建主键,并命名
create table person{
id varchar2(20),
name varchar2(50),
birthday date,
sex varchar2(2) default '男',
constraint person_id_pk primary key(id)
);
--2.唯一约束
--unique 在一个表中只能建一个主键约束,如果其他列不希望出现重复,可用唯一约束 。
create table person(
id varchar2(20) primary key,
name varchar2(50) unique not null,
birthday date not null,
sex varchar2(2) default '男'
);
--3.非空约束
--not null 不能为空。
create table person(
id varchar2(20) primary key,
name varchar2(50) not null,--非空约束
birthday date not null,
sex varchar2(2) default '男'
);
--4.检查约束
--check 必须满足检查条件
create table person(
id varchar2(20) primary key,
name varchar2(50) not null,
age number(3) check(age between 0 and 100),
birthday date not null,
sex varchar2(2) default '男' check(sex in('男','女'))
);
eg:
create table person(
id varchar2(20),
name varchar2(50) not null,
age number(3),
birthday date not null,
sex varchar2(2) default '男',
constraint person_id_pk primary key(id),
constraint person_name_uq unique(name),
constraint person_age_ck check(age between 0 and 100)
);
--5.主-外键约束(两张表进行约束操作。)
drop table person;
drop table book;
create table person(
pid varchar2(20),
name varchar2(50) not null,
age number(3),
birthday date not null,
sex varchar2(2) default '男',
constraint person_id_pk primary key(id),
constraint person_name_uk unique(name),
constraint person_age_ck check(age between 0 and 100)
);
create table book(
bid number primary key,
bname varchar2(20) unique not null,
bprice number(5,2),
pid varchar(20),
constraint person_book_pid_fk foreign key(pid) references person(pid)
);
--注意点:
1.在子表中设置的外键,必须是父表中的主键。
2.删除记录时,必须先删除字表记录,再删除父表。
drop table book;
drop table person;
强制删除:drop table book cascade constraint;(强制连父表一起删除)
级联删除:如果希望在删除主表时,关联删除子表级联
drop table person;
drop table book;
create table person(
pid varchar2(20),
name varchar2(50) not null,
age number(3),
birthday date not null,
sex varchar2(2) default '男',
constraint person_id_pk primary key(pid),
constraint person_name_uk unique(name),
constraint person_age_ck check(age between 0 and 100)
);
create table book(
bid number primary key,
bname varchar2(20) unique not null,
bprice number(5,2),
pid varchar(20),
constraint person_book_pid_fk foreign key(pid) references person(pid) on delete cascade --on delete cascade
);
insert into person(pid,name,age,birthday,sex)
values(1,'zhangsan',20,to_date('1988-10-11','yyyy-mm-dd'),'男');
insert into book(bid,bname,bprice,pid)
values(1001,'J2SE',30,1);
select * from person;
select * from book;
delete from person where pid=1;--对应子表book中pid 为1的也会删除。
6.修改约束
drop table person;
create table person(
pid varchar2(20),
name varchar2(50) not null,
age number(3),
birthday date not null,
sex varchar2(2) default '男'
);
alter table person add constraint person_pid_pk primary key(pid);
alter table person add constraint person_name_uk unique(name);
alter table person add constraint person_age_ck check(age between 0 and 150);
alter table person add constraint person_age_ck check(sex in('男','女'));
--增加主外键约束
drop table book;
create table book(
bid number,
bname varchar2(20),
bprice namber(5,2),
pid varchar(20)
);
alter table book add constraint book_bid_pk primary key(bid);
alter table book add constraint person_book_pid_fk foreign key(pid) references person(pid)
7.rownum 表示行号,每张表中均存在的伪列。
select rownum,ename from emp where rownum <=2;
select rownum,ename from emp where rownum between 2 and 5;--不能直接用rownum进行中间查询
--正确写法,通常用于分页查询
select * from (select rownum rn,ename from emp where rownum <5) temp where temp.rn>2;
8.集合操作
create table emp20 as select * from emp where rownum<5;
1》union 并(返回结果之和,没有重复)
select * from emp
union
select * from emp20 --返回emp中所有的14条记录
2》union all 并(返回结果之和,包含重复)
select * from emp
union all
select * from emp20 --返回18条记录
3》intersect 交(返回结果相同的部分)
select * from emp
intersect
select * from emp20 --返回4条记录
4》minus 差(返回结果差集)
select * from emp
minus
select * from emp20 --返回10 条记录
--1.主键约束
--唯一标识,不能为空,通常用于ID
--1>创建主键
create table person(
id varchar2(20) primary key,
name varchar2(50),
birthday date,
sex varchar2(2) default '男'
);
insert into person(id,name,birthday,sex)
values(1,'zhangsan',to_date('1988-05-11','yyyy-mm-dd'),'男');
select * from person;
insert into person(id,name,birthday,sex)
values(1,'zhangsan',to_date('1988-05-11','yyyy-mm-dd'),'男');
--2>创建主键,并命名
create table person{
id varchar2(20),
name varchar2(50),
birthday date,
sex varchar2(2) default '男',
constraint person_id_pk primary key(id)
);
--2.唯一约束
--unique 在一个表中只能建一个主键约束,如果其他列不希望出现重复,可用唯一约束 。
create table person(
id varchar2(20) primary key,
name varchar2(50) unique not null,
birthday date not null,
sex varchar2(2) default '男'
);
--3.非空约束
--not null 不能为空。
create table person(
id varchar2(20) primary key,
name varchar2(50) not null,--非空约束
birthday date not null,
sex varchar2(2) default '男'
);
--4.检查约束
--check 必须满足检查条件
create table person(
id varchar2(20) primary key,
name varchar2(50) not null,
age number(3) check(age between 0 and 100),
birthday date not null,
sex varchar2(2) default '男' check(sex in('男','女'))
);
eg:
create table person(
id varchar2(20),
name varchar2(50) not null,
age number(3),
birthday date not null,
sex varchar2(2) default '男',
constraint person_id_pk primary key(id),
constraint person_name_uq unique(name),
constraint person_age_ck check(age between 0 and 100)
);
--5.主-外键约束(两张表进行约束操作。)
drop table person;
drop table book;
create table person(
pid varchar2(20),
name varchar2(50) not null,
age number(3),
birthday date not null,
sex varchar2(2) default '男',
constraint person_id_pk primary key(id),
constraint person_name_uk unique(name),
constraint person_age_ck check(age between 0 and 100)
);
create table book(
bid number primary key,
bname varchar2(20) unique not null,
bprice number(5,2),
pid varchar(20),
constraint person_book_pid_fk foreign key(pid) references person(pid)
);
--注意点:
1.在子表中设置的外键,必须是父表中的主键。
2.删除记录时,必须先删除字表记录,再删除父表。
drop table book;
drop table person;
强制删除:drop table book cascade constraint;(强制连父表一起删除)
级联删除:如果希望在删除主表时,关联删除子表级联
drop table person;
drop table book;
create table person(
pid varchar2(20),
name varchar2(50) not null,
age number(3),
birthday date not null,
sex varchar2(2) default '男',
constraint person_id_pk primary key(pid),
constraint person_name_uk unique(name),
constraint person_age_ck check(age between 0 and 100)
);
create table book(
bid number primary key,
bname varchar2(20) unique not null,
bprice number(5,2),
pid varchar(20),
constraint person_book_pid_fk foreign key(pid) references person(pid) on delete cascade --on delete cascade
);
insert into person(pid,name,age,birthday,sex)
values(1,'zhangsan',20,to_date('1988-10-11','yyyy-mm-dd'),'男');
insert into book(bid,bname,bprice,pid)
values(1001,'J2SE',30,1);
select * from person;
select * from book;
delete from person where pid=1;--对应子表book中pid 为1的也会删除。
6.修改约束
drop table person;
create table person(
pid varchar2(20),
name varchar2(50) not null,
age number(3),
birthday date not null,
sex varchar2(2) default '男'
);
alter table person add constraint person_pid_pk primary key(pid);
alter table person add constraint person_name_uk unique(name);
alter table person add constraint person_age_ck check(age between 0 and 150);
alter table person add constraint person_age_ck check(sex in('男','女'));
--增加主外键约束
drop table book;
create table book(
bid number,
bname varchar2(20),
bprice namber(5,2),
pid varchar(20)
);
alter table book add constraint book_bid_pk primary key(bid);
alter table book add constraint person_book_pid_fk foreign key(pid) references person(pid)
7.rownum 表示行号,每张表中均存在的伪列。
select rownum,ename from emp where rownum <=2;
select rownum,ename from emp where rownum between 2 and 5;--不能直接用rownum进行中间查询
--正确写法,通常用于分页查询
select * from (select rownum rn,ename from emp where rownum <5) temp where temp.rn>2;
8.集合操作
create table emp20 as select * from emp where rownum<5;
1》union 并(返回结果之和,没有重复)
select * from emp
union
select * from emp20 --返回emp中所有的14条记录
2》union all 并(返回结果之和,包含重复)
select * from emp
union all
select * from emp20 --返回18条记录
3》intersect 交(返回结果相同的部分)
select * from emp
intersect
select * from emp20 --返回4条记录
4》minus 差(返回结果差集)
select * from emp
minus
select * from emp20 --返回10 条记录
相关文章推荐
- ORACLE中DBMS_SQL的用法
- ORACLE频繁被锁
- Oracle中向表中插入数据
- oracle创建表空间、用户
- oracle ORA_ROWSCN 行记录的更新时间
- Oracle dblink调用函数报ORA-00904 标识符无效
- ORACLE在dos管理命令
- oracle表碎片整理
- 【Oracle 优化器】自适应游标共享(Adaptive Cursor Sharing)功能
- 如何创建Oracle数据库
- Oracle导入导出提示EXP-0006:出现内部不一致的错误解决办法
- oracle存储过程将某张表一个字段的多值分开成多条数据插入到一张新表
- 通过sqoop增量传送oracle数据到hive
- Oracle java.sql.SQLException: 数字溢出
- Oracle的if else if
- Oracle:跳跃式索引(Skip Scan Index)浅析
- oracle数据库截取字符串
- oracle使用数据泵导入导出数据
- oracle扩展表空间以及清空临时表
- oracle数据库常见操作