13.视图
一般来说视图是基于某条select语句的结果集而创建出来的虚表,能像物理表一样进行操作,但一般只用作查询,物理表的数据发生改变时,基于它创建的视图也会变。
视图命名:
一般以v_开头
视图的名称:
如果创建视图的select语句是基于单表的不含函数及group by语句则被称为简单视图,如果是基于单表,并且含有函数或group by语句则称为复杂视图,如果是基于多张表的,则被称为连接视图。
视图的作用:
1.简化查询语句,如果需要多次使用某种复杂的查询,则可以将其中的某些select语句中的查询创建视图,以后就只需从视图查询
2.保密:使用视图可以使操作人员看不到原始表中某些列,起到保密的作用。
视图的创建需要权限:管理员授权语句:grant create view to ...
创建视图:create view ***(视图名) as select ...
修改视图对应的列:create or replace view *** as select ...
增加和修改删除视图内的数据:insert into v_ values('')等,注:这会造成原表的数据也随之改变,因此,不建议使用。
约束:
1.check option约束
首先视图只操作它可以查询出来的数据,对于它查询不出的数据,即使基表有,也不可以通过视图来操作。在创建视图的最后加上with check option即可。
2.readonly 约束
14.序列
序列创建:
CREATE SEQUENCE SEQ_MANAGER_RECRUIT_ID
INCREMENT BY 1 --每次增长1
MINVALUE 1 --最小值为1
MAXVALUE 9999 -- 最大值为9999
START WITH 71 -- 从71开始
NOCACHE -- 缓存
CYCLE ; -- 达到最大之后是否继续
使用序列:
insert into table_name values(seq_name,...)
--seq_name指序列名
删除 :
drop sequence 序列名
15.索引:
索引是一种允许直接访问数据表中某一数据行的树型结构,为了提高查询效率而引入,是独立于表的对象,可以存放在与表不同的表空间(TABLESPACE)中
索引记录中存有索引关键字和指向表中数据的指针(地址)
对索引进行的I/O操作比对表进行操作要少很多
索引一旦被建立就将Oracle系统自动维护,查询语句中不用指定使用哪个索引
索引是一种提高查询效率的机制
❤️ 注意:
索引是数据库对象之一,索引是为了提高查询效率。索引的统计与应用是数据库自动完成的,只要数据库认为可以使用某个已创建的索引时就会自动应用。
创建方式:
create index index_name on table_name(row_name);
重建索引(提高空间利用率):
alter index index_name rebulid;
删除不常用的索引:
drop index index_name ;
索引用处:
经常使用where语句,order by,distinct语句的字段
如果是复合索引,字段顺序应与关键字后面的字段一致
经常作为表的连接条件的字段,不为经常做DML操作的表
不为小表作索引,限制索引数目,索引不是越多越好。
适当删除不常用、不合理的索引
16.约束
16.1.非空约束(NOT NULL ):简称NU
一般直接在建表时的字段后加 NOT NULL
或者正规写法:字段名 字段类型 constraint 约束名称 NOT NULL
修改表时添加非空约束:ALTER table *** modify(列名,列类型 NOT NULL) ALTER table *** add constraint *** NOT NULL(列名)
取消非空约束:
ALTER table *** modify(列名,列类型 NULL)
16.2.唯一性约束(UNIQUE):简称UK
与非空类似
16.3.主键约束(PRIMARY KEY):简称PK
16.4.外键约束(FOREIGN KEY):简称FK
注:外键约束必须在两表数据一一对应的情况下才能建立,即两表的左外连接,右外连接,外连接和内连接所得到的数据一样的情况。
16.5.检查约束(CHECK):简称CK
ALTER TABLE *** ADD CONSTRAINT ***
CHECK (...);
17.connect by和level
基本语法
树状结构的数据
从父节点(根节点)开始找子节点
select *
from table
[start with condition1] --condition是表达式代指从哪个父节点开始。省略则输出全部。下类似
connect by [prior] id=parentid --prior不加则只会返回一条数据
从子节点返回去找父节点
select * from table [start with condition1]
connect by id= [prior] parentid
例子:
select t.*, level, CONNECT_BY_ROOT(id)
from tab_test t
start with t.id = 0
connect by prior t.id = t.fid;
从子节点返回有两种写法
--1.
select t.*, level, CONNECT_BY_ROOT(id)
from tab_test t
start with t.id = 4
connect by t.id = prior t.fid;
--2.
select t.*, level, CONNECT_BY_ROOT(id)
from tab_test t
start with t.id = 4
connect by prior t.fid = t.id;
资料来源:Oracle数据库基础(五)(视图,序列,索引)_Alive的博客-CSDN博客
Oracle数据库基础(六)(约束)_Alive的博客-CSDN博客