第三章 表空间和数据库对象(同义词、序列、视图)

数据库对象是数据库的组成部分,用 create 命令进行创建,用 alter修改,用 drop 执行删除操作。
前面已经接触过的数据库对象有表、用户等。

一、同义词的概念
同义词(Synonym)是数据库对象的一个别名,Oracle 可以为表、视图、序列、过程、 函数、程序包等指定一个别名。同义词有两种类型:
私有同义词:拥有 CREATE SYNONYM 权限的用户(包括非管理员用户)即可创建私 有同义词,创建的私有同义词只能由当前用户使用。
公有同义词:系统管理员可以创建公有同义词,公有同义词可以被所有用户访问。
语法:
create or replace synonym 同义词名for 表及来源;
create or replace public synonym 同义词名for 表及来源;
一个数据库对象的全称是:用户名.对象名,即 schema.object_name。

删除:只能被system 或 创建者 删除
drop synonym xiaomei.syn_emp;–私有同义词
drop public synonym semp;–共有同义词
删除用户:
–删除用户下的所有内容
drop user xiaomei cascade;
二、序列的应用
就是可以自动生成连续整数的对象,常用作主键的增长列。
语法:
create sequence 序列名

在每一次创建一个会话的时候,必须先执行序列nextval的值,否则会报‘此序列未在当前会话中定义’的错误。

序列的使用:
select myseq.nextval from dual;
–nextval,得到序列的下一个值
select myseq.currval from dual;
–currval,得到序列的当前值
序列的删除:drop sequence 序列名
序列在添加数据时的使用方法:
Insert into emp (empno,ename) values (MYSEQ.nextval,’xiaomie’);
查询当前用户都有哪些序列:
select * from user_sequences;
使用 ALTER SEQUENCE 可以修改序列,但是有限制:
① 不能修改序列的初始值。
② 最小值不能大于当前值。
③ 最大值不能小于当前值。

三、视图[https://blog.csdn.net/qq_21394609/article/details/48025505 博客详解]的概念
概念:视图就是把想显示的或者查询复杂的直接放到一个虚拟表上,是一个有名字的查询语句,查询的结果会根据原表的数据改变而变化
优点:对用户屏蔽基表(原表);
将复杂的查询保存为视图;
保证安全性只显示想显示的;
语法:create [or replace] [{FORCE|NOFORCE}] view 视图名as select语句… [with read only];
1. OR REPLACE:如果视图已经存在,则替换旧视图。
2.FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。
3.NOFORCE:如果基表不存在,无法创建视图,该项是默认选项。

视图查询语句中如果存在函数的使用,一定要给函数列添加上相应的别名信息;
视图内所要展现的内容为查询过程中的结果集,要求结果集中不能出现重复的列名;

====================同义词=========================
–登录system用户,创建xiaomei用户
create user xiaomei1 identified by xiaomei1;
–给xiaomei用户授予 CONNECT 角色和 RESOURCE 角色
grant connect,resource to xiaomei1;
–授予创建同义词的权限
grant create synonym to xiaomei1;
–切换至xiaomei1用户
–创建同义词 synonym
–该步骤提醒权限不足的原因为
–xiaomei1用户没有创建同义词的权限
create or replace synonym syn_emp for scott.emp;

–访问同义词 –报错没有表或者视图
select * from syn_emp;
–登录scott用户授予xiaomei1查看emp表的权限
grant select on emp to xiaomei1;
–切换至xiaomei1用户查看同义词
select * from syn_emp where sal>2000;

–用系统管理员来创建公有同义词
create or replace public
synonym syn_dept for scott.dept;

select * from syn_dept;

grant select on dept to xiaomei1;

drop public synonym syn_dept;

drop synonym xiaomei1.syn_emp;

create or replace
synonym xiaomei1.syn_emp for scott.emp;

select * from syn_emp;

==================视图=========
select table_name from user_tables;
/*案例 :基于 EMP 表和 DEPT 表创建视图
*/
CREATE OR REPLACE VIEW EMPDETAIL AS
SELECT EMPNO,ENAME,JOB,HIREDATE,
EMP.DEPTNO,DNAME
FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO
WITH READ ONLY ;

SELECT deptno,count(*)
FROM EMPDETAIL group by deptno;
–视图查询语句中如果存在函数的使用,一定要给函数列添加上相应的别名信息;
CREATE OR REPLACE VIEW myemp AS
select * from (
SELECT deptno,count(*) cou
FROM emp group by deptno)
with read only;

select * from (
SELECT deptno,count(*)
FROM emp group by deptno);

select count(*) from myemp;

====================序列========
/*创建一个从 1 开始,默认最大值,
每次增长 1 的序列,要求 NOCYCLE,缓存中
有 30 个预先分配好的序列号。 */
create sequence myseq1
start with 1
increment by 1
nocycle
cache 30
–序列的使用 nextval currval
select myseq1.nextval from dual;–得到序列的下一个值
select myseq1.currval from dual;–得到序列的当前值

insert into emp(empno,ename)
values(myseq1.nextval,’SSS1’);

select ‘XL01’||myseq1.nextval from dual;

select myseq1.nextval||ename from emp;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值