Oracle学习 第13天

一、约束:先跳过,MsSQL里也不怎么用了

二、视图:这个还是比较有用的,特别是和其它公司合作时,经常是互相提供视图

1、创建视图:CREATE OR REPLACE VIEW XX AS SELECT * FROM XXX; 用【OR REPLACE】比较方便更新

默认SCOTT用户没有创建视图权限

2、视图所在数据字典 USER_VIEWS

3、视图增加数据:单表可以,但如果INSERT INTO 视图,则只会增加视图包含的这些数据,剩作的表字段会用NULL填充,如果不能为NULL则会报错。

4、视图更新数据:单表可以

5、视图多表插入或更新:会报【无法通过联接视图修改多个基表】

6、删除数据:单表可以,但多表关联只会删了一张表,另一张表未删除

7、WITH CHECK OPTION:不会更新视图创建条件字段,但可更新其它字段

8、WITH READ ONLY:只读视图

9、删除视图:DROP VIEW XXX

三、序列Sequence(类似MsSQL自增列)

1、创建序列,CREATE SEQUENCE XXX,

2、伪列, XXX.CURRVAL、XXX.NEXTVAL,要先调用NEXTVAL,才能调用CURRVAL。相当于调用了NEXTVAL后,序列才到了【可用状态】

3、序列缓存,默认20,即一开始生成20个,用完后再生成20个,不是每次去生成,而是一次性生成若干个备用

4、使用序列:INSERT INTO XX (Id, Name) VALUES (XXSEQ.NEXTVAL, 'xxx'); MsSQL设置个自增列就可以不用管它了,Oracle要手动处理

5、删除序列:DROP SEQUENCE XXX;

6、步长/初始值:CREATE SEQUENCE XXX INCREMENT BY 步长 START WITH 初始值

7、缓存:CREATE SEQUENCE CACHE 缓存,如不需要缓存,则:CREATE SEQUENCE NOCACHE

8、循环序列:CYCLE/NOCYCLE,如果设置了NOCACHE会报CACHE值不能小于CYCLE值

9、修改序列:ALTER SEQUENCE XXX

10、删除序列:DROP SEQUENCE XXX

11、自动序列:Oracle 12C之后才有的新特性,与MsSQL的自增列一样

建表时要自增的列加上 GENERATED BY DEFAULT AS IDENTITY

四、同义词

1、创建同义词:CREATE OR REPLACE SYNONYM 同义词名称 FOR 数据库对象;

2、删除同义词:DROP SYNONYM 同义词名称

五、ROWNUM/ROWID伪列

1、ROWID是一列类似GUID的不重复伪列,类似于MsSQL的主键,可用于标识数据行。

2、ROWNUM:行号(当前查询)

SELECT * FROM XXX WHERE ROWNUM = 1; 查出第一行

但ROWNUM = 2却查不出来,因为ROWNUM是随机生成,在SELECT中出现,而WHERE优先于SELECT

只能用<或<=,BETWEEN AND之类不行,大于也不行

3、利用ROWNUM分页:

SELECT * FROM (

  SELECT *, ROWNUM AS RN

  FROM XXX WHERE ROWNUM<=10

) T

WHERE T.RN>5

4、FETCH:ORACLE 12C新特性,类似MySQL的LIMIT

取指定范围:OFFSET 开始位置 ROWS FETCH NEXT 个数 ROWS ONLY

六、索引,主键或唯一约束会自动创建索引

1、B树索引、降序索引、函数索引:CREATE INDEX 索引名称 ON 表名称(列名称[ASC | DESC]);

B树索引:最常用的普通索引,即平衡二叉树

2、位图索引:CREATE BITMAP INDEX 索引名称 ON 表名称(列名称[ASC | DESC]);

3、删除索引:DROP INDEX 索引名称

原文地址:https://www.cnblogs.com/liuyouying/p/5638035.html