一、视图
视图是从表中抽出来的逻辑上相关的数据集合,本身不存储数据,通过它可以对基表里面
的数据进行查询和修改。是存储在数据字典里的一条select语句,将查询的结果作为一个表来
使用。
1.创建视图
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
其中:
FORCE:不管基表是否存在ORACLE都会自动创建该视图;
NOFORCE:只有基表都存在ORACLE才会创建该视图:
alias:为视图产生的列定义的别名;
subquery:一条完整的SELECT语句,可以在该语句中定义别名;
WITH CHECK OPTION : 插入或修改的数据行必须满足视图定义的约束;
WITH READ ONLY : 该视图上不能进行任何DML操作。
WITH CHECK OPTION 和 READ ONLY 的时候,子查询中不能使用 ORDER BY 子句;
创建视图时,表达式列必须指定别名
子查询中使用 GROUP BY、ORDER BY、DISTINCT、ROWNUM、表达式列时,不能对视图进行增删改
对视图的修改即对基表的改变,需要满足基表的完整性约束。
基表删除后,视图也会自动被删除。
给B用户授予了DBA权限,B用户可以查询任意用户的表,但要通过A用户的表建立视图还要专门属于权限
2.删除视图,删除基表后,视图也被删除了
DROP VIEW info_view;
3.视图信息视图
SELECT * from user_views; --用户定义视图,包括视图对应的查询语句
select * from dba_views; --系统视图信息字典
4.使用视图的好处:
a.简化SQL,可把复杂的SQL语句简单化
b.安全性,可保证数据的安全性,限制对数据的访问,因为它对表中的一些字段是隐藏的
c.灵活性,可使相同的数据以不同形式出现在不同的视图中
d.不占存储空间:视图只需要占用数据字典中保存其定义的空间,而无需额外的存储空间。
e.视图数据会随着表中数据的改变而改变
二、约束
表、列级的强制规定,强加在表上的规则或条件,定义业务规则,防止垃圾数据进入数据库
1.NOT NULL约束,NOT NULL约束只能定义为列级约束,而不能为表级约束;
alter table emp modify ename not null;
2.UNIQUE约束
alter table emp add constraint emp_un UNIQUE(emp_no,emp_name);
非空约束的列中插入''和null时都提示错误,10g的bug
3.主键约束
alter table emp add constraint emp_pk primary key (emp_no,emp_name);
4.foreign key约束,用来维护从表和主表的引用完整性,父表被依赖的列必须是主键。注意外键约束的增删改操作。
主外键的一对一和一对多情况,注意外键为空的情况。
ON DELETE SET NULL子句:当主表中的一行数据被删除时,Oracle系统会自动地将所有从表中依赖于它的数据记录的外键改成空值;
ON DELETE CASCADE:当主表中的一行数据被删除时,Oracle系统会自动地将所有从表中依赖于它的数据记录删除;
alter table emp add constraint emp_no_fk foreign key (emp_no) references dept(emp_no) on delete cascade;
alter table emp add constraint emp_no_fk foreign key (emp_no,emp_name) references dept(emp_no,emp_name) on delete cascade;
5.CKECK 约束
alter table salary add constraint salary_min_chk check(salary>0);
6.约束的禁用和激活
alter tabel emp modify constraint cons_name disable/enable;
7.删除约束
alter table salary drop constraint salary_min_chk;
8.查询约束信息
select * from dba_constraints where owner='SCOTT';
select * from dba_cons_columns where owner='SCOTT';
SELECT * FROM USER_CONSTRAINTS;
SELECT * FROM USER_CONS_COLUMNS;
三、序列
是一个计数器,用来填充主键和计数
1.创建序列
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];
CREATE SEQUENCE emp_sequence INCREMENT BY 1 START WITH 1 [NOMAXVALUE NOCYCLE CACHE 10];
2.使用序列
emp_sequence.NEXTVAL 为序列的下一个编号;
emp_sequence.CURRVAL 为当前编号
你不能使用序列的CURRVAL和NEXTVAL,在下面情况下(具体参见官方文档):
a:子查询中
b:在视图或物化事物的查询中????
c:SELECT查询中使用了DISTINCT操作符
d:SELECT查询中有GROUP BY或ORDER BY
3.删除序列
DROP SEQUENCE emp_sequence;
4.序列相关视图,不能修改序列的初始值
SELECT * FROM USER_SEQUENCES;
SELECT * FROM DBA_SEQUENCES;
四、同义词
1.Oracle的同义词(synonyms)就是别名,是一种映射关系。用于简化对象访问和提高对象访问的安全性。不占用实际存储空
间,只有在数据字典中保存了同义词的定义。公有同义词由DBA创建,数据库中所有的用户都可以使用公用同义词,普通
用户创建的同义词为私有同义词,需要CREATE PUBLIC SYNONYM权限,可以将同义词操作权限授予其他用户。可以为表、视
图、存储过程、函数或另一同义词等对象创建同义词,方便访问其它用户的对象,隐藏了对象的身份,缩短对象名字的长度
2.创建同义词
CREATE [OR REPLACE] [PUBLIC] SYNONYM [ schema.] 同义词名称 FOR [ schema.] object [ @dblink ];
3.删除同义词,当同义词的原对象被删除是,同义词并不会被删除
DROP [ PUBLIC ] SYNONYM [ schema. ] 同义词名称 [ FORCE ];
4.同义词在数据库连接中的应用
DBlink:用于跨本地数据库,访问另外一个数据库表中的数据时
grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to scott;
配置本地连接远程数据库的tnsnames.ora文件;
Create [public]database link DB_Link_name connect to username identified by passwd using 'connectstaring';
访问对象要通过 objectname@DB_Link_name
create synonym synonym_name for table_name@DB_Link;
5.同义词系统视图
SELECT * from User_Synonyms;
SELECT * from dba_synonyms;
来源:oschina
链接:https://my.oschina.net/u/3967174/blog/2245332