一、约束:先跳过,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 索引名称