1.表空间
表空间是数据库逻辑结构的一个重要组件。表空间可以存放各种应用对象,如表、索引。而每个表空间有一个或多个数据文件组成。
2.表空间的分类
- 永久性表空间:一般保存表、视图、过程和索引等的数据。SYSTEM SYSAUX USERS EXAMPLE 表空间是默认安装的
- 临时性表空间:只用于保存系统中短期活动的数据,如排序数据等
- 撤销表空间:用来帮助回退未提交的事务数据,已提交了的数据在这里是不可以恢复的。一般不需要建临时和撤销表空间,除非把它们转移到其他磁盘中以提高性能
3.表空间目的
- 对不同用户分配不同的表空间,对不同的模式对象分配不同的表空间,方便对用户数据的操作,对模式对象的管理
- 可以将不同数据文件创建到不同的磁盘中,有利于管理磁盘空间,有利于提高I/O性能,有利于备份和恢复数据等
4.对表空间的操作:
/*创建表空间*/
create tablespace wordtbs --表空间名称
datafile 'E:\T142\WORDTBS01.dbf' --文件路径
size 10M --表空间大小
autoextend on next 10M --自动扩展10M
/*查看当前用户下的表空间*/
select * from dba_data_files;
/*修改表空间大小*/
alter database
datafile 'E:\T142\WORDTBS01.dbf'
resize 20M;
/*向表空间内添加数据文件*/
alter tablespace wordtbs
add datafile
'E:\T142\WORDTBS02.dbf'
size 10M
autoextend on;
/*更改表空间为只读*/
ALTER TABLESPACE wordtbs READ ONLY;
/*删除表空间*/
drop tablespace wordtbs including contents and datafiles;
6.用户权限管理
- Sys:是Oracle中的一个超级用户
- System:是Oracle中默认的系统管理员,又有DBA权限
- Scott:是Oracle数据库中的一个示范用户,一般在数据库安装时创建
/*创建用户*/
create user ab
identified by 123456
default tablespace wordtbs
/*授予权限 连接/创建表*/
grant connect,resource to A_oe;
/*授予对表执行操作的权限*/
grant all on scott.dept to ab;
grant insert,select,update,delete on scott.emp to ab;
/*回收权限*/
revoke connect,resource from ab;
revoke all on scott.emp from ab;
/*
===========================================================
| 创建A_oe用户
============================================================
*/
CREATE USER A_oe IDENTIFIED BY bdqn
DEFAULT TABLESPACE wordtbs
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON wordtbs
7.序列
是用来生成唯一,连续的整数的数据库对象。常用来自动生成主键或唯一键的值。序列可以按升序排序,也可以按降序排序。
序列的一系列操作:
--创建表
create table toys(
toysid number(4) not null,
toyname varchar(20)not null,
toyprice number(3,0) not null
);
--创建序列:
create sequence seql
start with 10
increment by 1
maxvalue 2000
nocycle
cache 30;
/*序列在创建成功后 必须先经过nextval初始化之后才可以使用currval*/
select seql.nextval from dual;
select seql.currval from dual;
--修改序列的语法:
alter sequence seql
increment by 30
maxvalue 300
minvalue 10
cycle
cache 10;
/*删除序列*/
drop sequence seql
/*插入数据*/
insert into toys(toysid,toyname,toyprice)
values (seql.nextval,'twenty',25);
insert into toys (toysid,toyname,toyprice)
values (seql.nextval,'magic pencil',75);
insert into toys(toysid,toyname,toyprice)
values (seql.nextval,'tom',65);
/*查看toys表数据*/
select * from toys;
/*删除表*/
delete from toys
--使用GUID 生成唯一标识符 推荐在并行环境下使用
select sys_guid() from dual;
8.同义词
在数据库中,同义词可以提供其他数据库对象的别名。
用途:
-
- 简化SQL语句
- 隐藏对象的名称和所有者
- 为分布式数据库的远程对象提供了位置透明性
- 提供了对对象的公共访问
分类:
-
- 私有同义词:自能对当前模式的用户访问
- 可被所有的数据库用户访问
/*
===========================================================
| 创建私有同义词
============================================================
*/
CREATE OR REPLACE SYNONYM emp FOR employee;
----以A_oe用户登录
SELECT * FROM emp;
/*
===========================================================
| 创建公有同义词
============================================================
*/
CREATE PUBLIC SYNONYM public_emp FOR A_hr.employee;
---以aoe登录
select * from public_emp
/*
===========================================================
| 删除同义词
============================================================
*/
--删除私有同义词
DROP SYNONYM emp;
--删除公有同义词
DROP PUBLIC SYNONYM public_emp;
9.索引
是与表关联的可选结构,是一种快速访问数据的途径,可提高数据库性能。
作用:
-
- 快速取数据;
- 保证数据记录的唯一性;
- 实现表与表之间的参照完整性;
- 在使用ORDER by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间
优点:
-
- 大大加快数据的检索速度;
- 创建唯一性索引,保证数据库表中每一行数据的唯一性;
- 加速表和表之间的连接;
- 在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
缺点:
-
- 索引需要占物理空间。
- 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。
/*B树索引*/
create unique index index_empno on employee(empno);
/*反向键索引*/
create index index_reverse_empno on employee(empno) reverse;
/*位图索引*/
create bitmap index index_bit_job on employee(job);
/*删除索引*/
drop index index_bit_job;
/*重建索引*/
alter index index_reverse_empno rebuild noreverse;
10.分区表
Oracle 允许用户把一个表中的所有行分为几个部分,并将这些部分存储在不同位置。被分区的表称为分区表,分成的每个部分称为一个分区
--范围分区
partition by range(hiredate)
(
partition p1 values less than (to_date('1981-04-1','yyyy-mm-dd')),
partition p2 values less than(maxvalue)
);
drop table employee
select * from employee;
--插入数据
insert into employee select * from scott.emp;
--查询所有分区
select table_name,partition_name from user_tab_partitions
where table_name=upper('employee');
--查询分区表
select * from employee partition(P2);
--删除分区表
alter table employee drop partition(P1);
--创建间隔分区
PARTITION BY RANGE(hiredate)
INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
( PARTITION p1 VALUES LESS THAN (to_date('1981-04-01','yyyy-mm-dd')));