Oracle简述

Oracle是甲骨文公司推出的一款大型数据库管理系统。甲骨文公司成立于1977年,总部位于美国加利福尼亚州的红木滩。1989年,Oracle正式进入中国市场;2013年,甲骨文超越 IBM ,成为继 Microsoft 后全球第二大软件公司。

Oracle的版本从8i开始完全支持Java。Oracle是一种大型关系数据库,关系数据库支持的SQL语言包括:

DDL(Data Define Language)数据定义语言,如create,alter,drop,truncate等
DML (Data Manipulation Language)数据操纵语言,如insert,delete,update,select等
DCL (Data Control Language)数据控制语言,如grant,revoke等

  我们在电脑上安装了Oracle数据库后,以Win7为例,可以先在电脑的“服务和应用程序”里将所有Oracle服务设置为“手动”开启方式,在需要使用Oracle时进行手动开启,从而避免电脑内存被占用过高。

在需要使用Oracle时,我们可以打开DOS窗口,在里面开启Oracle和相应的监听服务。举例来说,我们在安装Oracle时,将Oracle服务命名为orcl,那么服务启动如下:

net start oracleserviceorcl        开启oracle服务

lsnrctl start        开启监听

  在需要关闭Oracle时,则操作如下:

net stop oracleserviceorcl        关闭Oracle服务
lsnrctl 关闭监听

  接下来我们可以打开Oracle的SQL Plus窗口,在提示的输入用户名和密码里,分别输入scott和tiger,然后以scott用户的权限登录进Oracle进行操作;我们还可以在电脑上安装PL/SQL来操作Oracle。scott用户默认提供了几个表可以作为演示,如下所示:

select * from dept;
select * from emp;
select * from bonus;
select * from salgrade;

  我们一般通过SQL来操作Oracle。

一般来说,Sql可以分为初中高三级。

Sql初级主要包括增删改查、内外连接、子查询等;

Sql中级主要包括事务、函数、序列、同义词、视图等;

Sql高级主要包括PL/Sql、存储过程、自定义函数、触发器等。

另外,对索引的灵活运用是一个实用技巧。

基本表的定义格式如下所示:

create  table   表名(
列名 数据类型 [default 缺省值] [not null]
[,列名 数据类型 [default 缺省值] [not null]]
……
[,primary key(列名 [,列名] …)]
[,foreign key (列名 [,列名] …)
references 表名 (列名 [,列名] …)]
[,unique(列名 [,列名] …)]
[,check(条件)])

  在Sql初级的基本操作里,我们主要看下having与where的区别。Having用来筛选聚合之后的结果集,Where用来筛选表中的记录。如下例所示:

select deptno,sum(sal) from emp group by deptno having sum(sal)<10000;

select deptno,sum(sal) from emp where sal>2000 group by deptno;

  总的来说,Where 在聚合前执行条件筛选,having在 聚合后执行。Having可以使用聚合函数,Where 则不可以。

另外,我们在删除表中的记录时,truncate是移除表中所有的数据行,并释放表中的存储空间,在执行truncate语句后,不能对该操作回滚rollback;可以用delete语句来做相同的操作,delete不会立即释放表空间,因而可以回滚。相对而言,truncate速度更快,而且不写入日志。

在sql中级里,sql中的dml语句可以通过设置事务的提交方式(自动提交或手动提交)来选择手动提交或自动提交,而DDL语句则不用设置提交,系统会自动提交。换言之,在Oracle中,只有对数据记录的增删改查 是手动提交,其他是自动提交。

提及事务,我再次重复下曾经在《数据库简述(以MySQL为例)》文章里说过的事务4大特性,即原子性、一致性、隔离性、持久性。

其中,原子性:事务中的操作是不可分割的逻辑单元;

  一致性:事务前后的业务逻辑要一致;

  隔离性:事务之间的操作相对独立,不受影响;

  持久性:事务一旦发生就持久有效。

事务的命令包含的关键词主要有commit(提交),rollback(回滚),savepoint(保存点)等关键词。

另外,视图是一个虚拟的表,视图本身并没有存储任何数据,使用视图我们可以限定用户只访问表的一部分数据;通过利用with,check,option选项,我们可以限制用户对视图的更改和插入记录在我们指定的值域中。视图演示如下:

#简单的视图
Create view myview as select * from emp where job=‘MANAGER’;
#带有聚合函数的视图
Create view myviewa as select deptno,sum(sal) totsal from emp group by deptno;
#从多张表连接形成的视图
Create view myviewb as select ename,job,dname,loc from emp e,dept d where e.deptno=d.deptno;
#对视图的更改实际上是对表的更改
Update myview set sal=sal+20;
#删除视图
drop view myview;

  在数据库设计中,我们通常需要设计实体关系模型。在这方面,E-R图为我们从现实世界到数据模型提供了一个中间工具,它包括了实体、属性和联系三个要求。示意图如下:

Oracle简述

E-R图在具体表示中,用矩形表示实体,用椭圆表示属性,用菱形表示联系。 实体间的联系,以及属性和实体间、实体和联系间用线段连接。实体与实体之间的关系包含三种,分别是一对一(如一个身份证号对应一个人),一对多(一个人可以有多个朋友),多对多(一个老师可以对应多个学生,一个学生也可以对应多个老师)。

一般来说,设计E-R图的原则是:首先, 针对特定用户的应用,确定实体、属性和实体间的联系,设计该用户视图的局部E-R图 ;其次,综合各个用户的局部E-R图,产生反映数据库整体概念的总体E-R图。

一个系统的E-R图不是唯一的。 现实世界的复杂性导致实体联系的复杂性,E-R图将实体联系模型转化为关系数据模型的规则有:一是E-R图中每个实体类型转化为一个关系模式, 实体类型中实体的属性转化为该关系模式的属性;实体标识符(实体键)转化为该关系模式的关键字; 每一个实体转化为该关系模式对应关系的一个元组。二是E-R图中的联系,根据联系方式的不同,采取不同手段以使被它联系的实体所对应的关系彼此有某种联系。

在此,我再申明下数据库设计中的三范式 :第一,表中的列不可再分;第二,表中的列必须完全依赖于全主键而不能部分依赖;第三,不能出现依赖传递。

我们再来看Oracle中的数据字典。Oracle数据字典中的对象名称以三种前缀开头:”User”,”All”,”DBA”(只有在个别情况下例外)。

其中,“User”域中的记录通常显示有关执行查询的帐户所拥有的对象的信息 ;“All”域中的记录包括“User”记录以及有关已授予用户其特权的对象的信息; “DBA”域包含所有数据库对象,而不管其所有者是谁。对于大多数数据库对象而言,“User”,”All”和“DBA”域都是可用的。

常用的数据字典有:

User_Tables
User_Views
User_Constraints
User_Triggers

  

上一篇:MAC OS UI设计


下一篇:【转】MySQL中的共享锁与排他锁