表、约束、rownum、rowid、视图

 

一、表的增、删、改

 

1、创建表

create table person (

pid varchar2(18),

name varchar2(30),

age number(3),

birthdate date,

sex varchar2(2) default ''

);

给表添加一行信息

insert into person

values(777,'ASD',35,to_date('19970816','yyyymmdd'),'')

 

 

 

2、删除表 

语法格式:

delete from  

truncate table  ----表名 截断表,清空表数据 保持表结构,不可回滚。

drop table person;

 

 

3、修改表结构

(1)增加一列

 语法格式

 alter table 表名 add (字段列表,数据类型,默认值)

 例:给person 增加地址字段列表 ,默认暂无地址

 alter table person add (address varchar2(60) default '暂无地址');

 

(2)删除一列

 alter table 表名 drop column 列名

 例:删除字段列表为地址的一列

 alter table person drop column address;

 

(3)修改列的数据类型

 alter table 表名 modify(字段列表,数据类型, 默认值)

 alter table person modify ( pid varchar(20) default '');

 alter table person modify ( pid varchar(23))---修改字符串长度(修改的数值大于等于当前字符长度)

 注:--修改时该列记录空值才能修改

 

(4)为表重命名

 rename 旧名 to 新名--oracle 特有的操作

 rename person to tperson ;

(5)对列重命名

alter table 表名 rename column 字段列表 to 字段列表

 

 

二、约束

 

约束的分类:

(1)主键约束 表示唯一,不能为空

(2)唯一约束 列值不允许重复

(3)非空约束 不能为空值

(4)检查约束  检查一个列的内容是否合法

(5)外键约束 在两张表进行约束

 

 

1、主键约束 primary key--主键约束一般在 id 使用,本身已经默认不能为空,可以在建表的时候指定。

方法一:

create table person (

pid varchar2(18) primary key,

wname varchar2(30),

age number(3),

birthdate date,

sex varchar2(2) default ''

);

 

方法二:

create table person (

pid varchar2(18) ,

wname varchar2(30),

age number(3),

birthdate date,

sex varchar2(2) default '',

constraint person_pid_pk primary key(pid)

);

 

 

2、非空约束 not null--表示一个字段列表的内容不能为空,插入数据时必须插入。

create table person (

pid varchar2(18),

wname varchar2(30) not null,

age number(3),

birthdate date,

sex varchar2(2) default ''

);

 

 

3、唯一约束 unique  --表示一个字段列表的内容不能重复出现。

方法一:

create table person (

pid varchar2(18),

name varchar2(30) unique not null,

age number(3),

birthdate date,

sex varchar2(2) default ''

);

 

方法二:

create table person (

pid varchar2(18) ,

name varchar2(30) not null,

age number(3),

birthdate date,

sex varchar2(2) default '',

constraint person_name_uk unique (name)

);

 

 

4、检查约束  check ---来判断一列中插入数据的内容是否合法

方法一:

create table person (

pid varchar2(18) ,

name varchar2(30),

age number(3) check (age between 1 and 100),

birthdate date,

sex varchar2(2) default '' check(sex in('','',''))

);

方法二:

create table person (

pid varchar2(18),

name varchar2(30),

age number(3), 

birthdate date,

sex varchar2(2) default '',

constraint  person_age_ck check(age between 1 and 100),

constraint  person_sex_ck check(sex in('','',''))

);

 

 

5、主外键约束 foreign key 

 

(1)创建 person

create table person (

pid varchar2(18) ,

name varchar2(30) not null,

age number(3)  not null,

birthdate date,

sex varchar2(2) default '',

constraint person_pid_pk primary key(pid),

constraint  person_name_uk unique (name),

constraint  person_age_ck check(age between 1 and 100),

constraint  person_sex_ck check(sex in('','',''))

);

 

(2)创建 book

create table book (

bid number primary key not null,

bname varchar2(30),

bprice number(5,2),

pid varchar2(18),

constraint person_book_bid_fk foreign key(bid) references person(pid)

);

--也可直接使用 foreign key(bid) references person(pid)

 

注:--注意事项

(1)在子表中设置的外键约束必须是父表中的主键约束

(2)在删除时先删子表再删父表

(3)级联删除; drop table book constraint 

(4)在建表的时候也可以指定级联删除 

create table book (

bid number primary key not null,

bname varchar2(30),

bprice number(5,2),

pid varchar2(18),

constraint person_book_bid_fk foreign key(bid) references person(pid) on delete cascade

);

 

 

6、约束管理

(1)增加约束

alter table 表名 add constraint 约束名称 约束类型(约束字段)

分别给book表增加主键约束和外键约束

alter table book add constraint book_bid_pk primary key (bid);

alter table book add constraint person_book_bid_fk foreign key(bid) references person(pid) on delete cascade;

 

(2)约束的命名规范(建议)

 primary key: 表名称_字段名称_pk 如:constraint book_bid_pk primary key (bid)

 unique     : 表名称_字段名称_uk 如:constraint person_name_uk unique (name)

 check      : 表名称_字段名称_ck 如:constraint person_age_ck check(age between 1 and 100)

 

(3)删除约束

alter table 表名 drop constraint 约束名称

 

 

 

三、rownum  rowid 的使用--伪列

select emp.*,rownum from emp

 

1rownum ---表示行号,是一个伪列,可以在每一张表中出现

(1)查询前五条记录

select emp.* ,rownum from emp where rownum<=5

(2)查询第三条到第五条的记录

select * from (select emp.* ,rownum num from emp) a where num between 3 and 5

 

2rowid --表的伪列,用于唯一标识表行,间接给出了表行的物理位置,删除重复数据,(删除数据最快的方法)

select myemp.* ,rowid from myemp

 

create table myemp as select * from emp

insert into myemp (empno,ename,job,mgr,hiredate,sal,comm,deptno)---insert插入数据时自动生成 rowid

values (7991,'SMITH','前台',7369,'06-5-2019',2000,200,20);

 

select ename ,max(rowid) from myemp  group by ename

 

delete from myemp where rowid not in(select max(rowid)from myemp  group by ename );--删除重复数据

 

 

使用rownum分页

select * from emp where rownum<6 order by empno ---显示前5条记录

select * from emp where rownum != 8 ---显示前7条记录

select * from

(select rownum r,emp.* from emp where rownum <= 10 order by empno)

where r >=5 ---显示第5到10条记录

 

select * from 

(select rownum r,emp.* from emp)

where r between 5 and 10

 

---使用分析函数 row_number 分页显示

--注意:在使用ROWNUM 时,只有当Order By 的字段是主键时,查询结果才会先排序再计算ROWNUM

select * from (select ename, row_number() over(order by empno) r

from emp e) a

where a.r >= 5 and a.r <= 10;

 

 

四、视图

视图概念

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自,定义视图的查询所引用的表。

 

视图的好处(优点)

1、简单性,看到的就是需要的,视图不仅可以简化用户对数据的理解,也可以简化用户的操作,那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件

2、安全性,通过视图用户只能查询和修改他们所见到的数据,数据库中的其他数据既看不见也取不到通过视图,用户可以被限制在数据不同子集上

3、逻辑数据独立性,视图可以使应用程序和数据库表,在一定程度上独立,如果没有视图,应用一定是建立在表上的,有了视图之后,程序可以建立在视图之上,从而程序和数据库表被视图分割开来

4、视图可以简化复杂查询,限制数据访问,提高数据安全性,视图是一个虚拟表,本身不存储数据

 

1、视图的创建

create view  视图名称 as 子查询

create table tt as select * from emp

eg

创建部门20 的员工信息 包含 empno,ename ,sal ,deptno

grant create view to scott---授权

create view empv20 as select empno,ename,sal,deptno from emp;

 

DOS窗口中操作:

1、登录sys

2、授权 grant create view to scott

3、登录 scott 创建视图

 

2、查询视图

select view_name from user_views;

 

3、删除视图

语法

drop view 视图名称 

drop view empv21;

 

例题:创建一个视图EMP_VIEW,视图中包含员工姓名、部门编号,部门名称。并且数据只有部门编号为2030的数据。

create view EMP_VIEW as select a.ename,b.deptno,b.dname

from emp a,dept b where a.deptno=b.deptno and deptno in('20','30');

4、物化视图

含义:

就是具有物理存储的特殊视图,占据物理空间,就像表一样

是远程数据的本地副本,或者用来生成基于数据表求和的汇总表

 

 

五、序列

语法格式

create sequence 序列名

max value num

min value num

increment by num start with num

cache num

cycle

 

1、创建序列

1)创建序列 create sequence myseq;

 

2)创建测试表

create table testseq(

next number,

curr number

)

3)插入

insert into testseq values(myseq.nextval,myseq.currval)

4)查看

select * from testseq;

 

--默认值为2

create sequence myseq1 increment by 2;

 

create table testseq1(

next number,

curr number

)

 

insert into testseq1 values(myseq1.nextval,myseq1.currval)

select * from testseq1;

 

--起始值为 10 ,以 2 来增长

create sequence myseq2 increment by 2 start with 10;

 

create table testseq2(

next number,

curr number

)

 

insert into testseq2 values(myseq2.nextval,myseq2.currval)

select * from testseq2;

 

2、创建循环列循环列

create sequence myseq3 maxvalue 9 increment by 2 start with 1 cache 2 cycle;--1建序列

create table testseq3(-----2 、建测试表

next number,

curr number

)

insert into testseq3 values(myseq3.nextval,myseq3.currval)---3 、插入

select * from testseq3;--4 、查看

 

posted @ 2019-07-20 15:44  鹿小葵sr  阅读(315)  评论(0)    收藏  举报