您的位置:首页 > 数据库 > Oracle

Oracle基本基础

2020-01-15 11:01 991 查看

Oracle数据库

1、Oracle数据库基础

1、Oracle基本概念

1、数据库

​ 是磁盘是哪个储存数据的集合,在物理上表现为数据文件、日志文件和控制文件等,在逻辑上以表空间形式存在。

2、全局数据库

​ 全局数据库是用于区分一个数据的标识,在安装数据库、创建新数据库。创建控制文件、修改数据库结构、利用RMAN备份是都需要使用。

3、数据库实例

​ 每个启动的数据库都对应一个数据实例,由这个实例来访问数据库中的数据。

4、表空间

​ 每个Oracle数据库都是由若干个表空间构成,用户在数据库中建立的所有内容都被存储到表空间中。

5、数据文件

​ 数据文件的扩展名是.dbf,是用户存储数据库数据的文件,如存储数据库表中的记录、索引、存储过程、视图、数据字典定义等。

6、控制文件

​ 控制文佳的扩展名是.ctl,是一个二进制文件。存储的信息很多,数据文件和日志文件和位置。当Oracle读写数据是,要根据控制文件的信息查找数据文件。

7、日志文件

​ 日志扩展名是.log,记录了数据的所有更改信息,并提供了一种数据恢复机制,确保在系统崩溃或其他意外出现后重新恢复数据库。

8、模式和模式对象

​ 模式是数据库对象的集合。Oracle会为每一个数据库用户创建一个模式,此模式为当前用户所拥有,和用户具有相同的名称。

2、Oracle数据类型

1、字符数据类型

​ 1、char数据类型

​ 当需要固定长度的字符串时,使用char数据类型

​ 2、varchar2数据类型

​ 3、nchar数据类型

2、数值数据类型

​ number

3、日期时间数据类型

​ 1、date数据类型

​ 2、TIMESTAMP数据类型

4、LOB数据类型

​ 1、CLOB(字符):能够存储大量字符数据。

​ 2、BLOB(二进制):可以存储较大的二进制对象。

​ 3、BFILE(二进制文件):能够将二进制文件存储在数据库外部的操作系统文件种。

​ 4、NCLOB:用户存储大的nchar字符数据。

Oracle中的伪列

​ 1、ROWID

​ 数据库中的每行都有一个行地址,ROWID伪列返回该行地址。可以使用ROWID值来定位表中的一行。

​ 重要的用途:

​ 1)能以最快的方式访问表中的一行

​ 2)能显示表的行是如何存储的

​ 3)可以作为表中的唯一标识

​ 2、ROWNUM

​ 对于一个查询返回的每行,ROWNUM伪列返回一个数值代表行的次序。返回的第一行的ROWNUM值为1,返回的第二行的ROWNUM值为2,以此类推。

3、SQL语言简介

1、数据定义语言

​ 数据定义语言中,CREATE TABLE 语句用来创建新表,ALTER TABLE 语句用来修改表的结构,TRUNCATETABLE 语句用来删除表中所有记录,DROP TABLE 语句用来删除表。

Oracle和SQL Server数据库对象表之间的差异

类别 Oracle SQL Server
列数 254 1024
行大小 没有限制 8060字节,加16字节指向每个text或image列
最大行数 没有限制 没有限制
表命名规则 [schema.]table_name [[[server.]database.]owner.]table_name
2、数据操作语言

​ 数据操作语言用于检索、插入和修改数据库信息。

​ 最常用得SQL命令,如INSERT(插入)、UPDATE(更新)、SELECT(选择)、DELETE(删除)。

3、事务控制语言

​ 在Oracle数据库中事务控制语句(TCL)主要以下部分组成。

​ 1、COMMIT:提交事务,即把事务中对数据库的修改进行永久保存。

​ 2、ROLLBACK:回滚事务,即取消对数据库所做的任何修改。

​ 3、SAVEPOINT:在事务中创建存储点。

​ 4、ROLLBACK TO<SAvePoint_Name>:将事务回滚到存储点。

4、数据控制语言

​ 数控制语言为用户提供权限控制命令,数据库对象的所有者对这些对象拥有控制权限。授予其他用户权限(insert,select、update ……),使他们可以在其权限范围内执行操作。

4、SQL操作符

1、算术操作符

​ 算术操作符:+,-,*,/

2、比较操作符

​ 比较操作符:=,!=,<,>,<=,<=,in,and,like,is null,

3、逻辑操作符

​ 逻辑操作符:and,or,not

4、集合操作符

​ 1、UNION(联合)

​ 2、UNION ALL(联合所有)

​ 3、INTERSECT(交集)

​ 4、MINUS(减集)

5、连接操作符

​ 连接操作符 “||”用户将两个或多个字符串合并成一个字符串。

5、SQL函数

1、转换函数
函数 功能 示例 结果
TO_CHAR 转换成字符串类型 TO_CHAR(1234.5,’$9999.9’) $1234.5
TO_DATE 转换成日期类型 TO_DATE(‘1980-01-01’,‘yyyy-mm-dd’) 01-1月-80
TO_NUMBER 转换成数值类型 TO_NUMBER(‘1234.5’) 1234.5
2、其他函数
函数 功能
NVL(exp1,exp2) 如果expl的值为null,则返回exp2的值,否则返回exp1的值
NVL2(exp1,exp2,exp3) 如果exp1的值为null,则返回exp3的值,否则返回exp2的值
DECODE(value,if1,then1,if2,then2,…,else) 如果value的值为if1,则返回then1的值,如果value的值为if2,则返回then2的值…否则返回else的值
3、分析函数

​ 1、ROW_NUMBER

​ 返回一个唯一的值,当遇到相同数据时,排名按照记录集中记录的顺序依次递增

​ 2、DENSE_RANK

​ 返回一个唯一的值,当遇到相同数据时,所相同数据排名都是一样的。

​ 3、RANK

​ 返回一个唯一的值,当遇到相同的数据时,所有相同数据排名是一样的,同时会把最后一条相同记录和下一套不同记录的排名之间空出排名。

2、Oracle数据库应用

1、表空间

​ Oracle数据库包含逻辑结构和物理结构。

数据库的物理结构指的是构成数据库的一组操作系统文件。

数据库的逻辑结构是指描述数据组织方式的一组逻辑概念以及它们之间的关系。

表空间可以存放各种应用对象,如表、索引等。

​ 表空间是数据库逻辑结构的一个重要组件。

而每一个表空间由一个或多个数据文件组成。

​ 1、表空间的分类

​ 永久性表空间:一般保存表、上天、过程和索引等数据。system、sysaux、users、example表空间是默认 安装的。

​ 临时性表空间:只用于保存系统中短期活动的数据,如排序数据等。

​ 撤销表空间:用来帮助回退未提交的事务数据,已提交了的数据在这里是不可以恢复的。一般不需要创建临 时和撤销表空间,除非把它们转移到其它磁盘中以提高性能。

​ 2、表空间的目的

​ 1、对不同的用户分配不同的表空间,对不同的模式对象分配不同的表空间,方便对用户数据的操作、对模式对象的管理。

​ 2、可以将不同数据文件创建到不同的磁盘中,有利于管理磁盘空间、有利于提高I/O性能、有利于备份和回复数据等。

​ 3、一般在完成Oracle系统的安装并创建Oracle实例后,Oracle系统会自动建立多个表空间。

​ 3、 创建表空间

​ 创建表空间语法:

CREATE TABLESPACE tablespaceName
DATAFILE 'filename'
[SIZE integer [K | M]]
[AUTOEXTEND [OFF | ON]];

​ tablespaceName是需创建的表空间名称;

​ DATAFILE指定组成表空间的一个或多个数据文件,当有多个数据文件时使用逗号分隔;

​ filename是数据文件的路径和名称;

​ SIZE指定文件的大小,用K指定千字节大小,用M指定兆字节大小;

​ AUTOEXTEND子句用来启用或禁用数据文件的自动扩展,设置为ON则空间使用完毕会自 动扩展,设置为OFF则很容易出现表空间剩余容量为0的情况,使数据不能存储到数据中。

​ 4、删除表空间

DROP TABLESPACE tablespaceName;
2、 数据库权限管理

​ 权限是用户对一项功能的执行权利。

​ 在Oracle中,根据系统管理方式的不同,可将权限氛围系统全新啊与对象权限两类。

​ 1、系统权限

​ 系统权限是指被授权用户是否可以连接到数据库上及在数据库中可以进行哪些系统操作。

​ 系统权限是在数据库中执行某种系统级别的操作,或者针对某一类的对象执行某种操作的权利。

​ 2、 对象权限

​ 对象权限是指用户对数据库中具体对象所拥有的权限。

​ 对象权限是针对某个特定的模式对象执行操作的权利。

​ 只能针对模式对象未设置和管理对象权限,如数据库的表、视图、序列、存储过程、存储函数等。

​ (1) 授予权限语法如下:

GRANT 权限|角色 TO 用户名;

​ (2) 撤销权限的语法如下:

REVOKE 权限|角色 FROM 用户名;

3、PL/SQL

1、什么是plsql

​ 是专用于Oracle服务器,在SQL基础之上,添加了一些过程化控制语句,叫PLSQL过程化包括有:类型定义,判断,循环,游标,异常或例外处理。

2、语法:

plsql编程

declare
定义
变量名 变量类型;
变量名 变量类型 := 初始值;
vsal emp.sal%type;
变量名  表名.列名%type;   引用型变量,引用表列的变量类型
vrow emp%rowtype;
变量名  表名%rowtype;  引用表 一行的 变量类型
begin
执行语句
end;
-- 查询表格emp 工资  --800
select sal from emp where empno = 7369;

declare
vsal emp.sal%type;
begin
select sal into vsal from emp where empno = 7369;
dbms_output.put_line(vsal);
end;
3、游标(cursor)

游标,存放的是指针,指针就是地址,游标是系统为用户分配的一块缓冲区,用于存放select语句的执行结果,游标作用:用于对查询语句返回的多条(0、1、多条)进行处理,利用游标可以从结果集中每次提取一条记录,关于游标存在游标变量、显示游标、定义显示游标等很多知识点,再次知识简单介绍一下。

定义显示游标
cursor 游标名 is select语句
select语句不执行

打开游标:
open 游标名;
分配一块空间,执行select语句,把查询结果集放到分配的中
同时把这块空间的地址保存在游标中

从游标中取数据:
fetch 游标名 into var1,…|record
从游标中存放的地址对应的内存空间中取数据
一次取一行,每取一次之后,游标指针会自动移动到下一行

关闭游标:
close 游标名;
游标用完后,要关闭,未关闭的游标会占用内存,耗费系统资源
关了之后,就不可以再使用,否则无效的游标

显示游标的属性:
%found 最近一次取数据(fetch),有没有取到数据,取到则值为true,没有取到值false
%notfound
%isopen判断游标是否打开
%rowcount 用于记录当前从游标中已经取的记录个数

使用游标步骤(较为麻烦,一般不适用下面这种方式,有简单的方式,下面会介绍):
打开游标
从游标中取数据
开始循环
处理从游标取得数据
退出循环
关闭游标
游标for循环

忽略了显示的打开游标、关闭游标、从游标中取数据
for 记录变量名 in 游标名
loop
/循环体/
end loop;
记录变量名,该变量不需要显示定义,记录类型,结构与查询结果相同
方法一:

declare
cursor mycursor is select * from emp;
begin
for emp_record in mycursor
loop
update emp set ename = emp_record.ename || '_emp' where empno = emp_record.empno;
end loop;
commit;
end;

方法二:

declare
cursor mycursor is select * from emp;
emp_record emp%rowtype;
begin
open mycursor;
loop
fetch mycursor into emp_record;
if mycursor%found then
update emp set ename = emp_record.ename || '_emp' where empno = emp_record.empno;
else
exit;
end loop;
close mycursor;
commit;
end;
4、异常

在这里只是简单说明一下数据库中异常的常识,用的异常的地方还需要查找资料。

异常的组成部分:
ORA-01476: 除数为 0
01476      错误编号
除数为 0, 错误信息
ZERO_DIVDE 错误名
预定义异常:
no_date_found   01403   select未查到数据
too_many_rows   01422   返回的结果查过一行
ZERO_DIVDE      01476   除数为0
value_error         数据超出变量长度
cursor_already_open    游标已经打开
invalid_cursor      在不合法的游标上进行了操作
invalid_number      字符串转换为数字错误
异常处理部分:
exception
when 异常名 then 异常处理

when others then 其他异常处理
预定义函数:
sqlcode 返回错误代码
sqlerrm  返回错误消息
自定义异常:
异常名字 exception;
pragma exception_init(异常名字,oracle_error_number)
oracle_error_number:-20000~-20999
  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
YaoYuecheng 发布了3 篇原创文章 · 获赞 4 · 访问量 395 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: