Oracle学习(10):其他数据库对象

其他数据库对象

数据库对象种类

视图

视图介绍

视图是一种虚表.

视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。

向视图提供数据内容的语句为SELECT 语句, 可以将视图理解为存储起来的 SELECT
语句.

视图向用户提供基表数据的另一种表现形式

视图的优点

限制数据访问

简化复杂查询

提供数据的相互独立

同样的数据,可以有不同的显示方式

但视图不能提高性能

创建视图语句

使用下面的语法格式创建视图

?

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view

[(alias[, alias]...)]

AS subquery

[WITH CHECK OPTION [CONSTRAINT constraint]]

[WITH READ ONLY [CONSTRAINT constraint]];

?FORCE:           子查询不一定存在

?NOFORCE:     子查询存在(默认)

?WITH READ ONLY:只能做查询操作

子查询可以是复杂的SELECT 语句

修改视图语句

使用CREATEOR REPLACEVIEW 子句修改视图

CREATE OR REPLACE VIEW empvu80

(id_number, name, sal, department_id)

AS SELECT  employee_id, first_name || ‘ ‘ || last_name,

salary, department_id

FROM    employees

WHERE   department_id = 80;

CREATEVIEW 子句中各列的别名应和子查询中各列相对应

屏蔽DML操作

可以使用WITH READ ONLY 选项屏蔽对视图的DML操作

任何DML 操作都会返回一个Oracle server 错误

删除视图

删除视图只是删除视图的定义,并不会删除基表的数据

DROP VIEW
view;

视图示例

SQL> --视图

SQL> create view empincomeview

2  as

3  select empno,ename,sal,sal*12 annlsal ,sal*12+nvl(comm,0) income from emp;

SQL> show user

USER 为 "SCOTT"

SQL> /

视图已创建。

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID

------------------------------ ------- ----------

DEPT                           TABLE

EMP                            TABLE

BONUS                          TABLE

SALGRADE                       TABLE

EMP10                          TABLE

EMP20                          TABLE

TESTSAVEPOINT                  TABLE

TESTDELETE                     TABLE

BIN$91xa7gtoQfiGlzbFlex5HQ==$0 TABLE

TEST3                          TABLE

MYPERSON                       TABLE

TNAME                          TABTYPE  CLUSTERID

------------------------------ ------- ----------

EMPINCOMEVIEW                  VIEW

已选择12行。

SQL> desc EMPINCOMEVIEW

名称                                                                                是否为空? 类型

----------------------------------------------------------------------------------- -------- --------------------------------------------------------

EMPNO                                                                               NOT NULL NUMBER(4)

ENAME                                                                                        VARCHAR2(10)

SAL                                                                                          NUMBER(7,2)

ANNLSAL                                                                                      NUMBER

INCOME                                                                                       NUMBER

SQL> select * from   名称                                                                                是否为空

2   ----------------------------------------------------------------------------------- -------

3   EMPNO                                                                               NOT NUL

4   ENAME

5   SAL

6   ANNLSAL

7   INCOME

8  ;

EMPNO                                                                               NOT NUL

*

第 3 行出现错误:

ORA-00933: SQL 命令未正确结束

SQL> select * from EMPINCOMEVIEW;

EMPNO ENAME        SAL    ANNLSAL     INCOME

---------- ---------- ----- ---------- ----------

7369 SMITH        800       9600       9600

7499 ALLEN       1600      19200      19500

7521 WARD        1250      15000      15500

7566 JONES       2975      35700      35700

7654 MARTIN      1250      15000      16400

7698 BLAKE       2850      34200      34200

7782 CLARK       2450      29400      29400

7788 SCOTT       3000      36000      36000

7839 KING        5000      60000      60000

7844 TURNER      1500      18000      18000

7876 ADAMS       1100      13200      13200

EMPNO ENAME        SAL    ANNLSAL     INCOME

---------- ---------- ----- ---------- ----------

7900 JAMES        950      11400      11400

7902 FORD        3000      36000      36000

7934 MILLER      1300      15600      15600

已选择14行。

SQL> host cls

序列

什么是序列?

序列: 可供多个用户用来产生唯一数值的数据库对象

自动提供唯一的数值

共享对象

主要用于提供主键值

将序列值装入内存可以提高访问效率

定义序列语句

CREATE SEQUENCE sequence

[INCREMENTBY n]

[START WITH n]

[{MAXVALUE n | NOMAXVALUE}]

[{MINVALUE n | NOMINVALUE}]

[{CYCLE | NOCYCLE}]

[{CACHE n | NOCACHE}];

创建序列

l创建序列DEPT_DEPTID_SEQ为表
DEPARTMENTS
提供主键

l不使用CYCLE
选项

CREATE SEQUENCE dept_deptid_seq

                INCREMENT BY 10

                START WITH 120

                MAXVALUE 9999

                NOCACHE

                NOCYCLE;

查询序列

查询数据字典视图USER_SEQUENCES 获取序列定义信息

   SELECT 
sequence_name,
min_value,
max_value,

     increment_by,
last_number

   FROM 
user_sequences;

如果指定NOCACHE选项,则列LAST_NUMBER 显示序列中下一个有效的值

NEXTVAL和CURRVAL伪列

NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用

CURRVAL 中存放序列的当前值

NEXTVAL应在 CURRVAL之前指定,二者应同时有效

修改序列

修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存

ALTER SEQUENCE dept_deptid_seq

INCREMENT BY 20

MAXVALUE 999999

NOCACHE

NOCYCLE;

修改序列注意事项

l必须是序列的拥有者或对序列有
ALTER权限

l只有将来的序列值会被改变

l改变序列的初始值只能通过删除序列之后重建序列的方法实现

删除序列

l使用DROPSEQUENCE
语句删除序列

l删除之后,序列不能再次被引用

DROP SEQUENCE
dept_deptid_seq;

序列语句实例

SQL> --序列

SQL> create sequence myseq;

序列已创建。

SQL> create table testseq

2  (tid number,tname varchar2(20));

表已创建。

SQL> --insert into testseq values( ,‘aaa‘);

SQL> select myseq.currval from dual;

select myseq.currval from dual

*

第 1 行出现错误:

ORA-08002: 序列 MYSEQ.CURRVAL 尚未在此会话中定义

SQL> select myseq.nextval from dual;

NEXTVAL

----------

1

已选择 1 行。

SQL> insert into testseq values(myseq.nextval ,‘aaa‘);

已创建 1 行。

SQL> insert into testseq values(myseq.nextval ,‘aaa‘);

已创建 1 行。

SQL> /

已创建 1 行。

SQL> select * from testseq;

TID TNAME

---------- --------------------

2 aaa

3 aaa

4 aaa

已选择3行。

SQL> select myseq.currval from dual;

CURRVAL

----------

4

已选择 1 行。

SQL> hostcls

SP2-0042: 未知命令 "hostcls" - 其余行忽略。

SQL> host cls

索引

索引:

一种独立于表的模式对象, 可以存储在与表不同的磁盘或表空间中

索引被删除或损坏, 不会对表产生影响, 其影响的只是查询的速度

索引一旦建立, Oracle 管理系统会对其进行自动维护, 而且由Oracle 管理系统决定何时使用索引. 用户不用在查询语句中指定使用哪个索引

在删除一个表时, 所有基于该表的索引会自动被删除

通过指针加速 Oracle
服务器的查询速度

通过快速定位数据的方法,减少磁盘I/O

创建索引

自动创建: 在定义PRIMARYKEY 或UNIQUE 约束后系统自动在相应的列上创建唯一性索引

手动创建: 用户可以在其它列上创建非唯一的索引,以加速查询

l在一个或多个列上创建索引

CREATE INDEXindex

ON table(column[,column]...);

l在表EMPLOYEES的列LAST_NAME
上创建索引

    CREATE INDEX  
emp_last_name_idx

    ON   employees(last_name);

    Index created.

何时创建索引

以下情况可以创建索引:

l列中数据值分布范围很广

l列经常在WHERE
子句或连接条件中出现

l表经常被访问而且数据量很大,访问的数据大概占数据总量的2%到4%

何时不要创建索引

下列情况不要创建索引:

l表很小

l列不经常作为连接条件或出现在WHERE子句中

l查询的数据大于2%到4%

l表经常更新

查询索引

l可以使用数据字典视图USER_INDEXES
和USER_IND_COLUMNS 查看索引的信息

SELECT 
ic.index_name,
ic.column_name,

        ic.column_positioncol_pos,ix.uniqueness

FROM    user_indexes ix,
user_ind_columns
ic

WHERE   ic.index_name =
ix.index_name

AND     ic.table_name = ‘EMPLOYEES‘;

删除索引

l使用DROPINDEX
命令删除索引

     DROP INDEX
index;

l删除索引UPPER_LAST_NAME_IDX

DROP INDEX upper_last_name_idx;

l只有索引的拥有者或拥有DROPANY INDEX权限的用户才可以删除索引

索引语句示例

SQL> --索引

SQL> create index myindex on emp(deptno,job);

索引已创建。

SQL> --同义词:别名

SQL> show user

USER 为 "SCOTT"

SQL> select count(*) from hr.EMPLOYEES;

select count(*) from hr.EMPLOYEES

*

第 1 行出现错误:

ORA-00942: 表或视图不存在

SQL> /

COUNT(*)

----------

107

已选择 1 行。

同义词

为何使用同义词

使用同义词访问相同的对象:

l方便访问其它用户的对象

l缩短对象名字的长度

创建和删除同义词

l为视图DEPT_SUM_VU
创建同义词

CREATE SYNONYM  d_sum

FOR dept_sum_vu;

l删除同义词

DROP SYNONYM
d_sum;

同义词语句实例

SQL> create synonym hremp for hr.EMPLOYEES;

create synonym hremp for hr.EMPLOYEES

*

第 1 行出现错误:

ORA-01031: 权限不足

SQL> /

同义词已创建。

SQL> select count(*) from hremp;

COUNT(*)

----------

107

已选择 1 行。

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID

------------------------------ ------- ----------

DEPT                           TABLE

EMP                            TABLE

BONUS                          TABLE

SALGRADE                       TABLE

EMP10                          TABLE

EMP20                          TABLE

TESTSAVEPOINT                  TABLE

TESTDELETE                     TABLE

BIN$91xa7gtoQfiGlzbFlex5HQ==$0 TABLE

TEST3                          TABLE

MYPERSON                       TABLE

TNAME                          TABTYPE  CLUSTERID

------------------------------ ------- ----------

EMPINCOMEVIEW                  VIEW

TESTSEQ                        TABLE

HREMP                          SYNONYM

已选择14行。

SQL> spool off

时间: 2024-08-08 22:08:28

Oracle学习(10):其他数据库对象的相关文章

Oracle学习笔记九 数据库对象

Oracle 数据库对象又称模式对象,数据库对象是逻辑结构的集合,最基本的数据库对象是表. 其他数据库对象包括: 同义词 同义词是现有对象的一个别名.它的作用有: 1.简化SQL语句 2.隐藏对象的名称和所有者(隐藏原始对象内容) 3.提供对对象的公共访问 同义词共有两种类型: 公有同义词可被所有的数据库用户访问. 私有同义词只能在其模式内访问,且不能与当前模式的对象同名. 创建或替换现有同义词 create or replace synonym emp_syn for scott.emp; 删

oracle系列(四)oracle事务和常用数据库对象

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 前言:本次内容的相关知识点我们在学习sqlserver2008R2的时候介绍过一些,包括:事务.索引.视图等.那么今天我们学习在oracle上实现这些重要的内容,以实现数据库的优化. 一.事务 1.简介 事务是数据处理的核心,是业务上的一个逻辑单元,它能够保证其中对数据所有的操作,要么全部成功,要么全部失败.DBMS通过事务的管理来协调用

Oracle(一)--> 数据库对象详解(文字解释,先有个小理解~)

----数据库对象:逻辑结构的集合 ---- 一.同义词:现有对象的别名 /* 作用:  简化SQL语句 隐藏对象的名称和所有者 提供对对象的公共访问 分类:*/ --公有同义词:可以被所有的数据库用户访问,本地对象和公有对象同名时,本地对象优先 create public synonym syn1 for scott.emp; select * from syn1; --私有同义词:只能被当前模式访问,且不能与当前模式下的对象同名 create synonym emp1 for scott.e

Oracle事务和常用数据库对象

1.事务:有一组命令组成的逻辑单元,保证所有操作要么全部成功要么全部失败.以下情况事务结束:1)显式提交(commit) 2)显式回滚(rollback) 3)ddl语句隐身提交 4)正常结束程序提交 5)非正常结束程序回滚事务特点:ACID特性1)原子性 2)一致性 3)隔离性 4)持久性命令:commit 提交 rollback 回滚 set autocommit on 自动提交(回滚无效)2.索引:快速访问数据,一个单列最多只能建一个索引访问数据的方法:全表扫描.通过rowid(行号).索

详解Oracle 12c九项数据库对象管理操作

简介 1.用户管理2.用户授权3.事务管理4.索引5.视图以及物化视图6.序列7.导入导出数据8.同义词9.分区表 实验环境 系统环境:centos7.4Oracle服务IP地址:192.168.100.99光盘挂载目录:/mnt/sr0安装相关目录:/opt 命令步骤 一.用户管理 1.登录Oracle数据库 [[email protected] ~]$ lsnrctl start #启动监听 [[email protected] ~]$ sqlplus / as sysdba SQL> st

[转] Oracle学习之创建数据库(新建实例)

由于项目需求,在本机中开发,需要新建oracle数据库实例,亲测可以. 出处:http://blog.csdn.NET/luiseradl/article/details/6972217 http://wenku.baidu.com/view/864b9b2c453610661ed9f469.html My points: (1)我的头头说一般不需要创建数据库,在Orcl数据库中创建用户,创建用户对应的表就成了: (2)删除数据库和创建数据库启动的软件是一个. 一.新建实例1.安装好Oracle

Oracle学习总结3-基本对象

(一)表 1.表 创建表: create table test1(tid number,tname varchar2(20)); --增加新列: alter table test1 add photo blob; --修改列 alter table test1 modify tname varchar2(40); --删除列 alter table test1 drop column photo; --重命名列 alter table test1 rename column tname to u

oracle学习10

一.约束 1.NOT  NULL 2.UNIQUE unique唯一,也就是说id唯一,每个人的id都不同 unique可以列唯一,也可以表唯一 在上面把brxm定义成唯一约束了,然后在insert相同的brxm的时候就会报错 3.PRIMARY  KEY 具备not null 与unique的双重性质

ORACLE ADF11g:存储过程传入数据库对象

图解: 完

Oracle学习系列4

Oracle学习系列4 ************************************************************************************ 数据库更新操作: 分类: 查询操作:select 更新操作:insert ,update , delete 为了保存原始的emp表的信息,在进行增删改之前备份词表: create table emp_bak as select * from emp ; //将表emp结构和数据完整的复制出来 添加数据: