oracle中同义词(私有,公有),分区表(范围,间隔)

本文介绍了Oracle数据库中的同义词,包括私有和公有同义词的创建、访问和删除,以及其在权限管理中的应用。同时,文章详细讲解了分区表的概念,如范围分区和间隔分区,强调了分区表在性能提升、管理便捷和数据安全方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle


同义词:使用对象(TableView,同义词)的一个别名,不占用任何实际的存储空间,只是在Oracle的数据字典中保存其定义描述,在使用同义词时,Oracle会将其翻译为对应对象的名称。

  作用:屏蔽对象的名字及其持有者,为用户简化SQL语句

   01、分类

      私有同义词

        私有同义词只能在其模式内访问,且不能与当前模式的对象同名

      公有同义词

        公有同义词可被所有的数据库用户访问

  02.创建私有同义词

     1.system账户登录,让scott具有创建同义词权限

      grant create synonym to scott;

     2.scott账户登录,create  synonym dp for scott.dept;

     3.将查询dept的权限授予s2220这个用户

      GRANT SELECT ON dept to s2220

     4.s2220模式下访问同义词

       这个时候访问不到

  03.创建公有同义词

    ===========================================================

|            scott模式下创建dept表的公有同义词 dp

    ===========================================================

--使用SYSTEM用户登录,scott获得创建公有同义词权限

GRANT CREATE PUBLIC SYNONYM TO scott;

--scott模式下创建公有同义词dp作为scott用户dept表的别名

CREATE PUBLIC SYNONYM dp FOR dept;

--将查询dept的权限授予public角色。

GRANT SELECT ON dept TO PUBLIC;

--s2220模式下访问公有同义词

SELECT * FROM dp;

04.查看某张表的同义词

SELECT * FROM SYS.ALL_SYNONYMS WHERE table_NAME='DEPT'

05.删除同义词

 drop synonym dp



下面是 具体的代码示例:

------私有同义词
grant create synonym to scott
create synonym ee2 for scott.emp

grant select on scott.emp to sll
select * from ee2
SELECT * FROM SYS.ALL_SYNONYMS WHERE table_NAME='EMP'

SELECT * FROM ee2
--删除同义词
drop synonym ee
----------公有同义词
----------------------------------
---system
grant  create public synonym to scott

create public synonym ee1 for scott.emp
---scott
grant select on scott.emp to public
SELECT * FROM SYS.ALL_SYNONYMS WHERE table_NAME='EMP'
--sll
SELECT * FROM ee1

索引:分类


语法:

CREATE [UNIQUE] INDEX   index_name ON tablenamecolumn_list

[TABLESPACE  tablespace_name];

01.B树索引



Index entry 的组成部分:

Indexentry entry  header    存放一些控制信息。

Key column length     某一key的长度

Key column value    某一个key 的值

ROWID    指针,具体指向于某一个数据

02.反向键索引

  与常规索引相反,反向键索引在保持列顺序的同时反转索引列的字节。反向键索引通过反转索引键的数值来实现。优点:对于连续增长的索引列反转索引列可以将索引数据分散在多个索引块间,减少I/O瓶颈的发生。

   反向键索引通常建立在一些值连续增长的列上,如系统生成的员工编号。



03.位图索引

  位图索引的优点在于,它最适于低基数列(该列的值是有限的,理论上不会是无穷大)。例如,员工表中的工种(job)列,即便是几百万条员工记录,工种也是可计算的。类似的还有图书表中的图书类别类等。






分析:位图索引使用方面,和B*索引有很大的不同。B*索引的使用,通常是从根节点开始,经过不断的分支节点比较到最近的符合条件叶子节点。通过叶子节点上的不断Scan操作,“扫描”出结果集合rowid。

 

而位图索引的工作方式截然不同。通过不同位图取值直接的位运算(与或),来获取到结果集合向量(计算出的结果)。



索引的实:

/*
---------------索引
*/
select * from employee
--1.创建B树索引
create index indexemployee on employee(sal)
--2.唯一索引 
create unique index inndex_unique_sal on employee(comm)
--3.创建反向键索引
create index indexe on employee(deptno) reverse;
--4.位图索引
create bitmap index index_bit on employee(job)
--5.其他索引(大写函数索引)
create index index_ename on employee(upper(ename));

------------
---删除索引
drop index inndex_unique_sal;
---重建索引  将反向索引改为B树索引
alter index indexe rebuild noreverse


分区表:(主要是范围分区,间隔分区)

01.什么是分区表

 解析:Oracle允许用户把一个表中的所有行分为几个部分,并将这些部分存在不同的位置。被分区的表称为分区表,分区表的每个部分称为一个分区。

 02.分区表的优点

   改善查询性能

   表更容易管理

   便于备份和恢复

   提高数据安全性

 03.分区表的设定原则

   数据大于2GB,已有数据和新添加数据有明显的界限划分。

 04.分区表的分类

   解析:

范围分区

  列值的范围作为划分条件

散列分区

  列的hash值自动分配

列表分区

  列值必须明确指定

  一个分区列

复合分区

  先按第一分区方法分区

  再按第二分区方法划分子分区

其他分区

  虚拟分区

  间隔分区

 05.范围分区


1.范围分区

--1。范围分区
create table sales1
(
sales_id number,
product_id varchar2(5),
sales_date date not null
)
insert into sales1 values(1,'哈哈',to_date('2013-05-5','yyyy-MM-dd'));
insert into sales1 values(2,'哈哈1',to_date('2013-08-5','yyyy-MM-dd'));
insert into sales1 values(3,'哈哈2',to_date('2013-02-5','yyyy-MM-dd'));
insert into sales1 values(4,'哈哈3',to_date('2013-12-5','yyyy-MM-dd'));

partition by range(sales_date)
(
partition p1 values less than(to_date('2013-04-1','yyyy-MM-dd')),
partition p2 values less than(to_date('2013-07-1','yyyy-MM-dd')),
partition p3 values less than(to_date('2013-10-1','yyyy-MM-dd')),
partition p4 values less than(to_date('2014-01-1','yyyy-MM-dd')),
partition p5 values less than(maxvalue)
);

drop table sales1
----查询数据  p3区的
select * from sales1 partition(p3)
---删除p3区的数据
delete from sales1 partition(p3)

2.间隔分区

---------------2.间隔分区
create table sales2
(
sales_id number,
product_id varchar2(5),
sales_date date not null
)
partition by range(sales_date)
interval(numtoyminterval(3,'Month'))
(partition p1 values less than (to_date('2013-04-1','yyyy-MM-dd')));

----插入数据
insert into sales2 values(1,'a',to_date('2013-08-1','yyyy-mm-dd'));
---获得分区情况
select table_name,partition_name from user_tab_partitions 
where table_name=upper('sales2')
---查询分区数据
select *  from sales2 partition(sys_p21)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值