Oracle SQL命令通解三步曲

教程发布:风哥 教程分类:ITPUX技术网 更新日期:2022-02-12 浏览学习:318

哲学老师说:了解事物要抓住主要矛盾,兼顾次要矛盾。
数学老师说:解决问题要化整为零,各个击破。
学习Oracle 命令,你怎么说?
本文将引领大家从Oracle基本概念入手,了解某个早期版本语法命令,而后逐步了解各版本新增命令,从而建立起一个SQL命令的完整视图。
第一步:了解Oracle基本概念
SQL语法与Oracle基本概念紧密相关,在为数众多的SQL命令中,大部分命令是围绕Oracle基本概念设计的。比如CREATE TABLE、ALTER TABLE、DROP TABLE这三个命令,围绕TABLE(表)这个概念来设计,用于定义TABLE的结构。类似的SQL命令还有很多很多。所以我们要掌握SQL命令,首先应理解Oracle的基本概念。
让我们从关系数据库最基本、同时也是最核心的概念开始,分析几个Oracle基本概念的由来及含义。
首先,为了在数据库中存放数据,Oracle定义了表。表是数据的集合,由行和列组成。
当一个表很大的时候(包含成千上万的行),为了提升数据检索的速度,Oracle引入了索引。索引是实现数据高效检索的基础,也是SQL调优的最基本手段。
表中包含行,不同的行代表不同的实体。行不允许相同,否则无法代表不同实体,这就是实体的完整性约束。为了实现完整性约束,Oracle引入了序列:序列用来在整个数据库范围内产生唯一的顺序编号。
关系数据库的基本目的是在不同的用户间共享数据。表级别的授权无法实现行粒度和列粒度的权限管理,为此Oracle引入了视图。视图对表的行和列进行帅选,实现了行粒度和列粒度的权限管理目的。
有时我们要频繁地从多个表检索数据。各个表的数据默认存放到不同的段中,这意味着要到不同的数据块获取数据。为了加快检索速度,Oracle把若干个表的行存放到相同的数据块,这就是簇。簇提高了多表关联的性能,Oracle内部的数据字典表设计就用到了簇。
有了表、索引、序列和视图之后,Oracle 把这些对象聚合在一起,形成数据库。表和索引
之类的东西最终会存放到磁盘,其存在形式就是数据库文件。
让我们思考一个问题:如果定义表时,直接把表关联到文件会有什么问题?答案很明显:
如果数据文件位置发生变化,就得修改表的定义。为了解决此问题,Oracle 引入了表空间。
表空间是多个文件的集合,实现了数据库的逻辑表现与数据存储的分离,使之更易于管理。
大机构的数据很多,通常会分散到不同的数据库中。为了在不同数据库之间访问彼此的数
据,Oracle 引入了数据库链接。数据库链接是不同数据库间互相访问的通道。
如果应用程序访问了多个数据库,当某个库的部署发生变动时,如何避免对应用程序的代
码做更改呢?和表空间类似,Oracle 引入了同义词来解决该问题。同义词是模式对象的别
名,提供了数据独立性和位置透明性的功能。
上述概念是Oracle 早期版本就具有的。在后续各个版本中,Oracle 不断补充新概念,功能
不断增强,Oracle 数据库管理系统就像一棵树一样茁壮成长,枝繁叶茂。
上面简单地引出了几个Oracle 基本概念,对于概念本身的阐述只是点到为止,未做深入解
释。为了准确理解这些概念,我们看看Oracle 是如何定义这些概念的:
表(table):Basic unit of data storage in Oracle Database. Data in tables is stored in rows and
columns.
索引(index):Optional schema object associated with a nonclustered table, table partition,
or table cluster. In some cases indexes speed data access.
序列(sequence):A schema object that generates a serial list of unique numbers for table
columns.
视图(view):A custom-tailored presentation of the data in one or more tables. The views do
not actually contain or store data, but derive it from the tables on which they are based.
簇(cluster):Optional structure for storing table data. Clusters are groups of one or more
tables physically stored together because they share common columns and are often used
together. Because related rows are physically stored together, disk access time improves.
数据库(database):Organized collection of data treated as a unit. The purpose of a
database is to store and retrieve related information. Every Oracle database instance accesses
only one database in its lifetime.
表空间(tablespace):A database storage unit that groups related logical structures together.
The database data files are stored in tablespaces.
数据库链接(database link):A named schema object that describes a path from one database to another. Database links are implicitly used when a reference is made to a global object name in a distributed database. 同义词(synonym):An alias for a schema object. You can use synonyms to provide data independence and location transparency. 注:以上内容来自Oracle手册《Database Concepts》。
要注意的是,应结合实际例子来理解这些概念,而不能只停留在文字上。Oracle在不同版本中对某个概念的定义可能不同,若想透彻理解其本质,应仔细阅读《Database Concepts》相关内容。很多DBA反复阅读该文档,就是为了把握概念的本质。
第二步:了解Oracle版本6的SQL命令
事物的发展是循序渐进的,因此认识事物也应如此。
为了全面了解SQL命令,我们从Oracle版本6开始,构建一个最初的SQL命令清单,然后不断扩充其内容。
Oracle将SQL命令按功能分为六大类:
(1)数据定义语言命令(Data Definition Language commands,简称DDL命令)
(2)数据操纵语言命令(Data Manipulation Language commands,简称DML命令)
(3)事务控制命令(Transaction Control commands)
(4)会话控制命令(Session Control commands)
(5)系统控制命令(System Control commands)
(6)嵌入式SQL命令(Embedded SQL commands)
其中,DDL命令又分为如下细类:
 对象的创建、修改与删除相关命令(create, alter, and drop objects)
 授权、权限回收以及角色管理相关命令(grant and revoke privileges and roles)
 表、索引及簇统计信息分析命令(analyze information on a table, index, or cluster)
 数据库安全审计相关命令(establish auditing options)
 数据库对象备注相关命令(add comments to the data dictionary)
首先看DDL命令。
还记得我们前面介绍的那些Oracle基本概念吗?这些概念对应了如下27个DDL命令: 概念 创建 修改 删除

CREATE CLUSTER
ALTER CLUSTER
DROP CLUSTER
数据库
CREATE DATABASE
ALTER DATABASE
数据库链接
CREATE DATABASE LINK
DROP DATABASE LINK
索引
CREATE INDEX
ALTER INDEX
DROP INDEX
回滚段
CREATE ROLLBACK SEGMENT
ALTER ROLLBACK SEGMENT
DROP ROLLBACK SEGMENT
序列
CREATE SEQUENCE
ALTER SEQUENCE
DROP SEQUENCE
同义词
CREATE SYNONYM
DROP SYNONYM

CREATE TABLE
ALTER TABLE
DROP TABLE
表空间
CREATE TABLESPACE
ALTER TABLESPACE
DROP TABLESPACE
视图
CREATE VIEW
DROP VIEW
用户
ALTER USER
上述命令的含义无须过多解释,大家一看自明。
值得关注的是,为什么没有DROP DATABASE、ALTER DATABASE LINK、ALTER SYNONYM、CREATE USER和DROP USER这些命令呢?
我猜测,Oracle一开始不提供DROP DATABASE命令的原因,是觉得这个命令过于危险;不提供ALTER DATABASE LINK和ALTER SYNONYM这两个命令,是因为数据库链接和同义词本身结构简单,没有修改的必要;而不提供CREATE USER和DROP USER命令的原因,是早期的Oracle采用系统用户登录的方式(和DB2类似)。(注意:Oracle在后续版本中陆续补充了CREATE USER, DROP USER, DROP DATABASE和ALTER DATABASE LINK这些命令。)
与授权及权限回收相关的DDL命令有2个:GRANT和REVOKE。前者用于授权,后者用于收回权限。
与数据库安全审计相关的DDL命令也有2个:AUDIT (Traditional Auditing)和NOAUDIT (Traditional Auditing),前者用于开启审计,后者用于取消审计。
COMMENT命令用于给数据库对象添加备注,RENAME命令用于重命名数据库对象,二者亦为DDL命令。
再看DML命令。
版本6中提供了如下6个DML命令:
 INSERT、UPDATE、DELETE三个命令用于插入、修改及删除表中的行;
 SELECT命令用于从表中检索行;
 LOCK TABLE命令以显式的方式给表和视图加锁;
 EXPLAIN PLAN命令用于查看Oracle优化器预期的执行计划。
剩下5个命令是事务控制和会话控制命令:
(1)COMMIT、ROLLBACK、SAVEPOINT和SET TRANSACTION这4个命令用来控制事务
(2)ALTER SESSION命令用于控制会话。
(注意,Oracle版本6中还没有系统控制命令,该命令在Oracle版本7中首次出现)
至此,我们构建了一个Oracle版本6的命令清单: Oracle版本6命令清单 44个SQL命令 33个DDL命令 27个对象管理命令: CREATE xxx; ALTER xxx; DROP xxx 2个权限管理命令: GRANT; REVOKE 2个审计管理命令: AUDIT; NOAUDIT 2个对象重命名和备注命令: RENAME; COMMENT 6个DML命令: INSERT; UPDATE; DELETE; SELECT; LOCK TABLE; EXPLAIN PLAN 4个事务控制命令: COMMIT; ROLLBACK; SAVEPOINT; SET TRANSACTION 1个会话控制命令: ALTER SESSION
第三步:了解Oracle各版本新增SQL命令
Oracle从版本6到目前最新的版本12c,期间经历了:版本7,版本8,版本8i,版本9i,版本10g,版本11g,每一次版本发布都出现了或多或少的新命令,下面逐一介绍。
Oracle 版本7新增SQL命令
版本7引入了众多新概念及相关SQL命令,包括过程化SQL、触发器、安全管理、对象管理、系统控制等一共30个新命令。 Oracle版本7新增命令 SQL命令 过程化SQL相关: CREATE FUNCTION CREATE PACKAGE CREATE PACKAGE BODY CREATE PROCEDURE ALTER FUNCTION ALTER PACKAGE ALTER PROCEDURE DROP FUNCTION DROP PACKAGE DROP PROCEDURE 触发器相关: CREATE TRIGGER ALTER TRIGGER DROP TRIGGER 安全管理相关: CREATE PROFILE CREATE ROLE CREATE USER ALTER PROFILE ALTER RESOURCE COST ALTER ROLE DROP PROFILE DROP ROLE DROP USER
SET ROLE 对象管理相关: ALTER VIEW TRUNCATE CLUSTER TRUNCATE TABLE 系统控制相关: ALTER SYSTEM 其它命令: CREATE CONTROLFILE CREATE SCHEMA ANALYZE
Oracle版本8新增SQL命令
版本8引入了目录、库、物化视图、类型等概念及18个相关命令。 Oracle版本8新增命令 SQL命令 目录相关: CREATE DIRECTORY DROP DIRECTORY 库相关: CREATE LIBRARY DROP LIBRARY 物化视图相关: CREATE MATERIALIZED VIEW CREATE MATERIALIZED VIEW LOG ALTER MATERIALIZED VIEW ALTER MATERIALIZED VIEW LOG DROP MATERIALIZED VIEW DROP MATERIALIZED VIEW LOG 类型相关: CREATE TYPE
CREATE TYPE BODY ALTER TYPE DROP TYPE DROP TYPE BODY 本地索引相关: ALTER INDEXTYPE ALTER OPERATOR 其它命令: SET CONSTRAINT[S]
Oracle8i新增SQL命令
8i版本引入了上下文、维度、Java、统计信息等概念以及18个相关命令。 Oracle 8i新增命令 SQL命令 上下文相关: CREATE CONTEXT DROP CONTEXT 维度相关: CREATE DIMENSION ALTER DIMENSION DROP DIMENSION Java相关: CREATE JAVA ALTER JAVA DROP JAVA 统计信息相关: CREATE OUTLINE ALTER OUTLINE DROP OUTLINE ASSOCIATE STATISTICS DISASSOCIATE STATISTICS
本地索引相关: CREATE INDEXTYPE DROP INDEXTYPE CREATE OPERATOR DROP OPERATOR 其它命令: CALL
Oracle 9i新增SQL命令
9i版本引入了服务器参数文件的概念,新增了3个命令。 Oracle 9i新增命令 SQL命令 参数文件相关: CREATE PFILE CREATE SPFILE DML命令: MERGE
Oracle 10g新增SQL命令
10g版本引入了ASM磁盘组以及闪回数据库的概念及9个相关新命令。 Oracle 10g新增命令 SQL命令 ASM磁盘组相关: CREATE DISKGROUP ALTER DISKGROUP DROP DISKGROUP 闪回数据库相关: FLASHBACK DATABASE FLASHBACK TABLE CREATE RESTORE POINT
DROP RESTORE POINT PURGE 删除数据库命令: DROP DATABASE
Oracle 11g新增SQL命令
11g版本引入了闪回数据归档及模式对象多版本的概念,以及相关的7个命令。 Oracle 11g新增命令 SQL命令 闪回数据归档相关: CREATE FLASHBACK ARCHIVE ALTER FLASHBACK ARCHIVE DROP FLASHBACK ARCHIVE 模式对象多版本相关: CREATE EDITION DROP EDITION 其它命令: ALTER DATABASE LINK ALTER LIBRARY
Oracle 12c新增SQL命令
12c版本为了支撑软件即服务的应用模式,提供了多租户架构的数据库支撑,引入可插拔式数据库的概念以及相关的安全审计策略,包含了10个新增命令。 Oracle 12c新增命令 SQL命令 可插拔数据库相关: CREATE PLUGGABLE DATABASE ALTER PLUGGABLE DATABASE DROP PLUGGABLE DATABASE
安全审计策略相关: CREATE AUDIT POLICY (Unified Auditing) ALTER AUDIT POLICY (Unified Auditing) DROP AUDIT POLICY (Unified Auditing) AUDIT (Unified Auditing) NOAUDIT (Unified Auditing) ADMINISTER KEY MANAGEMENT 其它命令: ALTER SYNONYM
至此,我们简单介绍了Oracle各个版本引入的关键概念,并通过这些概念来把握相关的SQL命令,从而对整个SQL命令体系有了大致了解。

本文标签:
网站声明:本文由风哥整理发布,转载请保留此段声明,本站所有内容将不对其使用后果做任何承诺,请读者谨慎使用!
【上一篇】
【下一篇】