oracle学习历程 2017/8/21

来源:互联网 发布:thomson数据库 编辑:程序博客网 时间:2024/06/05 22:39

oracle的应用结构

单硬盘独立主机结构

最基本的应用结构是单硬盘独立主机结构。这个结构是最简单,最常用的结构,该结构中只有一台计算机,一块独立硬盘。这种结构中所有的数据库文件都放在一个硬盘上,对硬件的要求较高,对硬件可靠性较高,性能调整方向主要是减少对数据库文件的访问次数。

多硬盘独立主机结构

多硬盘独立主机结构只有一台计算机,但是该计算机内使用了多硬盘结构。如图所示:。这种结构使用了一个数据库服务器,一个数据库结构,数据库文件存储在多个物理硬盘中,这样可以减少数据库文件的链接数量,减少数据文件的磁盘I/O。

多数据库独立主机结构

多数据库独立主机结构只有一台计算机,可以有一个或多个硬盘,如图所示:。这种结构由多个数据库服务器,多个数据库文件组成,也就是一台计算机上安装两个版本的oracle数据库,尽管他们在同一台计算机上,但是所有内容均不是共享的。

C/S结构

在客户机/服务机(C/S)结构中,将数据库管理系统安装在服务器上,应用程序安装在客户机上,通过sql*net网络组件,在服务器,客户机建立链接,使客户机将数据请求发送给服务器,再由服务器将执行的结果发送给客户机。结构如图所示:

B/S结构

用户应用程序需要通过web浏览器来访问,如果客户机要访问oracle数据库,则该请求首先通过网络发到web服务器,然后通过web服务器将请求传递到数据库服务器。如图所示:。B/S三层结构是面向非链接的,即存取数据库时链接,存取结束时断开。与c/s架构相比,效率比较低。

分布式结构


结构图如下:
在这种结构中,数据不存出在一台服务器中,而是分布的在多服务器上,一个分布式数据库是由分布于计算机网络上的多个逻辑相关的数据库组成的。其中网络上的每个节点都具有独立处理能力。可以执行局部应用运算,也可以通过网络执行全局应用运算。其中,全局数据字典存放了全局数据库在各服务器上的存放情况。分布式数据库管理系统的数据存放在计算机网络上不同的局部数据库中,而在逻辑上数据之间有语义上的联系,属于一个系统。访问数据的用户可以是本地用户也可以是远程用户。

oracle网络

oracle网络服务为分布式异构计算环境提供了企业级连接解决方案,此外,他在链接,网络安全性,诊断能力等方面降低了网络配置和管理的复杂性,同时还增强了网络安全性和诊断功能。
配置oracle网络服务过程:
刚开始的安装就出现了问题,无法访问本地localhost,我猜测是iis的问题,打算先安装iis试试。安装方法(好吧,不好使)换成了谷歌浏览器就是好用,还是得我的大谷歌。ie也太谨慎了,关键是添加安全证书也没用。。。这个问题先掠过,我们用谷歌浏览器继续进行网络服务的配置。
在地址栏里输入:https://localhost:1158/em。打开oracle  enterprise manager。1158是oracle  enterprise manager的http端口号,em是enterprise manager的简称。

输入相关管理员信息,我使用的是sys账号。连接身份SYSDBA。
登陆后的状态图

sql 语句

功能分类:

   1、数据定义功能通过数据定义语言DDL(Data Definition Language)实现.主要用来定义数据库的逻辑结构,基本的DDL包括三类,即定义,修改,查询,分别对应create,alter,drop。

create table <表名>(<列名><数据类型>[列完整性约束条件],<列名><数据类型>[列完整性约束条件]);表名中输入的就是基表的名字。

其中,如果有约束条件的话,表的约束条件存放在数据字典中。
创建视图
        视图是从一个或几个基表中导出的表,他只是一张虚表,数据库中之存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基表中。
              一般格式:create view <视图名>(<列名>,<列名>,<列名>)  as <子查询> [with check option]
             
create or replace view temp as select * from zd_member_basic_info order by name;
创建索引
          创建索引。基本格式:create [UNIQUE][CLUSTER]index<索引名>
                                              on<表名>(<列名>[<次序>],<列名>[<次序>]);
         其中,unique是表示索引的每一个索引值不能重复,对应唯一的数据记录,cluster表示要建立聚簇索引,表名是要创建缩影的基表的名称,缩影可以建立在对应表的一列上和多列上,如果是多列,各列名需要用逗号分割,ASC表示升序,DESC表示降序。默认值是ASC。
        我们可以在查询效率最高的列上建立聚簇索引,从而提高查询效率。索引和表记录是放在一起存储的,所以一个基表上最多只能建立一个聚簇索引。
           删除。删除基表基本格式drop table<表名>;
                      删除视图基本格式drop view<视图名>;删除基表后,相关的视图并没有删除,需要手动逐一删除。
                      删除索引基本格式drop index<索引名>;
          修改。需要修改已建立好的基表用alter table 
                      alter table<表名>
                               【add<新列名><数据类型>[完整性约束]】
                               【DROP<完整性约束名>】
                               【MODIFY<列名><数据类型>】;用于修改原有的列定义。
在标准的SQL语言中,由于视图是基于表的虚标,索引是依附在基表上的,因此视图和索引均不提供修改视图和索引定义的操作,用户若想修改,则只能通过删除再创建的方法。
    2、数据查询功能通过数据查询语言DQL(Data Query Language)实现,主要用于对数据对象进行查询,仅包含查询(select)一种操作。
         select * from 表名。查询表内所有的列和行。可以用from字句查询指定的多个表,但要用,隔开。例如select * from hr.countries,hr.departments。
          select 列,列,列 from 表名,表名,表名;用于查询指定列的。
         算术表达式:select employee,firstname,lastname,salary*(1+0.1)  from employees;
                      同时,我们也可以为了提高结果集的可读性,拟定新标题。例如我们的名字叫做new_salary;firstname,lastname,salary*(1+0.1) new_salary  from employees;
           distinct关键字,用于检索到的重复的行。
                                      用法:select distinct 列名 from 表名;
           where字句,用于筛选从from字句中返回的值,完成选择的操作。其中,where后面可以跟条件表达式A=B,A>B,A<B,A!=B或A<>B(表示若A的值不等于B的值,则为true)。A LIKE B 这个是匹配运算符,如果A的值匹配B的值,则返回true,类似于word中的模糊查询。其中%代表0,1,或多个任意字符,_代表任意一个字符。例如:
查询client_id中有03的:select  client_id from hs_test  where client_id like '%03%'         命令来源
               连接运算符。where子句中可以使用连接运算符将各个表达式关联起来组成复合判断条件。具体有and和or
                                      select employee_id,first_name,last_name,department from emplyees
                                        where department_id=60  or department_id = 30;
                                        oracle 提供了两种关于空值的运算符。is null 和 is not null。
                                      select departmentid departmentname,manager_id from departments
                                                    where manager_id is null;
                                      oracle 排序命令。order by。这个语句可以指定查询结果按照某一列进行排序。例如
                                     select  employee_id,first_name,last_name,salary from where salary>2000 order by salary;此语句中,默认是按照升序排序的。
                                     select  employee_id,first_name,last_name,salary from where salary>2000 order by salary desc;这个语句是可以按照降序排序的。
             group by 子句。关于这个,我想单独列出来讲一下。
              HAVING子句,通常与group by 子句一起使用,在完成分组结果统计后,可以使用having子句对结果进一步筛选,如果不适用group by子句,having子句与where功能一样。他俩不同点只是where与单行的列有关,HAVING子句与组有关。
            对于having子句的理解,我们可以记住select语句中子句的顺序,在select语句中,首先from找到表,where接受from中输出的数据,而having子句接受来自group by ,where,from子句的输入。

    3、数据操纵功能通过数据操纵语言DML(Data Manipulation Language)实现,他用于更改数据库中的数据,包括插入,删除,修改三种操作,分别对应insert,delete,update三条语句。
    4、数据控制功能通过数据控制语言DCL(Data Control Language)实现,他包括对表和视图的授权,完整性规则的描述以及事务开始和结束等控制语句。相对应的语句有GRANT、REVOKE、COMMIT、ROLLBACK等,分别对应了授权,回收,提交和回滚等操作。
    由于内容太多,放到后面慢慢理解。


基表(Base Table)是本身独立存在的表,在SQL中一个关系就对应一个基表。
视图是从基表或其他视图中导出的表,他本身不独立存储在数据库中,也就是说,数据库只存放视图的定义而不存放视图对应的数据。只是一张虚表。
有点绕的地方来了,数据库的内模式定义:
        一个关系对应一个表,一个或多个基表对应一个存储文件,一个基表也可以对应多个存储文件,一个表可以带若干索引,索引也存放在存储文件中,每个存储文件与外部存储器上一个物理文件对应,存储文件的逻辑结构组成了关系数据库的内模式。如图所示:


SQL语句的编写规则

sql关键字不区分大小写。
字符值和日期值区分大小写。例如employee='SCOTT'和employee=‘scott’的结果是不一样的。
语句可以分行写,可以以分号结束,也可以以/结束。