主码、外码
关系型数据:是以关系数学模型来表示的数据。它以二维表的形式来描述数据
关系型数据库系统:硬件(客户机、服务器)、操作系统、关系型数据库管理系统和数据库、关系型数据应用系统、用户
什么是数据仓库
什么是联机分析
什么是数据挖掘
什么是集群技术
oracle2种工作模式:C/S和B/S
数据库服务器体系结构
进程结构(用户进程、服务器进程)
内存结构(系统全局区SGA(用户进程和服务器进程共用),程序全局区PGA(用户进程私用))
数据库逻辑结构(数据库、表空间、逻辑对象(表、索引、视图)、数据段(数据段、索引段、临时段、回滚段)、数据区间、数据块)
数据存储结构(数据库、物理文件(数据文件、控制文件、日志文件)、物理块)
注:
数据块 Data Block
数据区间 Data Extent
数据段 Data Segment
逻辑对象 Logic Object
表空间 TableSpace
数据库发展历史
网状数据库、层次数据库、关系数据库。
关系数据库的3个含义
1.在关系数据库中,信息被存放在二维结构表中
2.这些表之间是相互关联的
3.数据库不仅仅包含表,而且还包含了其他数据库对象
关系数据库的特点
关系(二维表)
元组(记录)
属性(字段)
域(属性的取值范围)
候选码(关系中能唯一标识元组的最小的属性集合)
主码(一组可以唯一标识元组的属性)
关系模式(指对关系的描述,通常称为表结构)
完整性
域完整性(字段属性的约束)
实体完整性(记录的唯一性)
参照完整性(对外键的约束)
数据库范式
第一范式(每一列不可分割)
第二范式(非主属性要完全依赖主属性,所谓完全依赖是指不能存在仅依赖主关键字一部分的属性(复合主键),如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。)
第三范式(非主属性之间不能相互依赖,属性不依赖于其它非主属性[消除传递依赖] )
关系数据库
通常包括:客户端应用程序、数据库服务器、数据库
数据库
一系列物理文件(数据文件、控制文件、联机日志)的集合或与之对应的逻辑结构(表空间、段等)被称为数据库
表空间
数据库结构提供对数据文件的逻辑映射,允许不同类型的数据分开存储,这些逻辑划分称做表空间。
数据库实例
SGA(System Global Area)存储结构,用来存储最近从数据库中查询的数据。
数据块缓存区和sql共享池是SGA最大的组成部分。
数据库实例也叫服务器,是用来访问数据库文件集的存储结构及后台进程的集合。在oracle并行服务器选项下,一个数据库可以被多个实例访问。
sql子语言
数据定义语言(Data Definition Language)DDL
数据查询语言(Data Query Language)DQL
数据操纵语言(Data Manipulation Language)DML(增加修改删除等操作)
数据控制语言(Data Control Language)DCL(设置或者更改数据库用户或角色权限的语句)
事务控制语言(Transaction Control Language)TCL
PL/SQL基本语法
PL/SQL不区分大小写
所有保留字都采用大写、用户定义的基本采用骆驼命名法。
分隔符(一句可以分多行)
引用字符串(注意:数字不用单引号,以及单引号转义)
括号
PL/SQL数据类型
标量、复合、引用、LOB
》标量类型
1.数字类型
NUMBER(p,s)
NUMBERIC(p,s)
FLOAT
DEC
DECIMAL
INT/INTEGER
BINARY_INTENER
PLS_INTEGER
SMALLINT
SIMPLE_INTEGER
REAL
DOUBLE_PRECISION
BINARY_DOUBLE
BINARY_FLOAT
2.字符类型
CHAR(size) 最大2000B
NCHAR(size) 最大1000B
VARCHAR2(size) 最大4000B
NVARCHAR2(size) 最大2000B
LONG
RAW(size)
LONG RAW
3.日期类型
DATE(定义日期和时间)
TIMESTAMP(定义日期和时间,不仅显示日期还会显示时间和上下午标记)
INTERVAL(存储2个TIMESTAMP之间的时间差异)
4.行标识符
ROWID(支持物理行标识,不支持逻辑行标识)和UROWID (支持物理行标识,也支持逻辑行标识)
5.布尔类型BOOLEAN
值有:TRUE、FALSE、NULL
(注意:它是PL/SQL数据类型,不支持表列数据类型)
》复合类型
PL/SQL记录、PL/SQL集合
其中PL/SQL集合包含:联合数组、嵌套表、VARRAY(变长数组) 3种复合数据类型
PL/SQL记录语法
TYPE name IS RECORD(定义成员列表)
联合数组
TYPE table_type_name IS TABLE OF scalar_type INDEX BY index_datatypes;
嵌套表
TYPE table_name IS TABLE OF table_type [NOT NULL]
VARRAY(变长数组)
TYPE type_name IS [VARRAY | VARYING ARRAY] (max size) OF element_type [NOT NULL]
》引用类型
REF CURSOR类型、REF类型
》LOB类型
CLOB 存储单字节字符数据
BLOB 存储非结构化的二进制数据
NCLOB 存储定宽Unicode多字节字符数据
BFILE 存储大型二进制文本的指针
PL/SQL基本结构
声明部分、执行部分(必需的部分)、异常处理部分
变量
变量名 类型标识符 [NOT NULL]:=值
TYPE%
ROWTYPE%
常量
常量名 CONSTANT 类型标识符 [NOT NULL]:=值
表达式
数值表达式:+ ,-, *, /, **(乘方)
字符表达式: ||(链接运算符)
关系表达式:<,>,=,<=,>=,!=,ALL,
ANY,SOME,
BETWEEN,
EXISTS
IN
IS
LIKE
逻辑表达式:NOT、AND,OR ,优先次序为 NOT、AND,OR
集合运算符:INTERSECT、MINUS、UNION、UNIONALL
行运算符:ALL,DISTINCT、PRIOR
流程控制
IF condition THEN
......
END IF
IF...THEN...ELSE
IF...THEN...ELSEIF
CASE(有2种)
LOOP 语句 END LOOP
其中包含EXIT或EXIT ...WHRN 跳出2种方式
循环标签(增强可读性)
WHTN...LOOP
FOR...LOOP
如
FOR i IN 1...3 LOOP
执行语句体
END LOOP
注意:i不能被赋值(即计数器不能被赋值)
注意:REVERSE反转
注意:循环的边界可以是文字,变量,表达式,但它们必须都是数字。否则PL/SQL会抛出预定义异常。
GOTO语句,要设置标签名(略)
NULL语句,本身并不做什么,只是简单地将控制权转交给下一个语句而已。
PL/SQL常用语句
DDL,DQL,DML,DCL,TCL
其中DCL用于实现权限授予(GRANT)和撤销(REVOKE)
PL/SQL常用的部分权限
CREATE USER
DROP USER
SELECE ANY TABLE
CREATE ANY TABLE
DROP ANY TABLE
CREATE VIEW
CREATE SEQUENCE
CREATE PROCEDURE
如:GRANT CREATE ANY TABLE TO USER1
REVOKE CREATE ANY TABLE FROM USER1
TCL事务控制语句
1.提交事务COMMIT
出现以下情况时会自动提交事务
执行DDL语句,执行DCL语句,退出SQL*PLUS
2.设置事务回滚点(也叫事务保存点)SAVEPOINT
如SAVEPOINT A;或EXEC DBMS_TRANSACTION.SAVEPOINT('A');
3.回滚事务(ROLLBACK)
指定回滚到某个事物保存点
ROLLBACK TO A或EXEC DBMS_TRANSACTION.ROLLBACK_SAVEPOINT('A');
回滚全部事务
ROLLBACK或EXEC DBMS_TRANSACTION.ROLLBACK
游标、过程、函数(与过程类似,但必须有一个返回类型)
包:DBMS_OUTPUT,DBMS_TRANSACTION等
集合:即是前面介绍的联合数组,嵌套表,可变数组
EXCEPTION:分为编译时错误和运行时错误
引发异常有2种方法
发生ORACLE错误自动触发
RAISE显式地触发异常
注意:OTHERS子句
PL/SQL异常又分:预定义异常和非预定义异常(标准的异常和程序员定义的异常需要使用raise显式触发)
注意:使用Raise_Application_Error
如Raise_Application_Error(-20001,‘表中已经存在该记录’)
其中-20001必须在-20000到-20999之间,防止与oracle的任何错误码发生冲突,后一个参数不超过2KB
注意在WHEN OTHERS中使用:SQLCODE或SQLERRM
常用开发工具SQL*PLUS和SQL Developer
设置执行格式、显示格式(略)
在Oracle内部,每个数据表都有一个伪列ROWID,用于存放ROWID类型的二进制值。每个ROWID代表了一行数据的存储地址。物理ROWID 能够标识普通数据表中的一行信息,而逻辑ROWID能够标识索引组织表(index-organized table)中的一行信息。其中ROWID类型只能存储物理内容,而UROWID(universal rowid)类型可以存储物理或者逻辑ROWID。
建议:只有在旧的应用程序中,为了兼容性我们才使用ROWID数据类型。对于新的应用程序,应该使用UROWID数据类型。
水平分区将表分为多个表。每个表包含的列数相同,但是行更少。例如,可以将一个包含十亿行的表水平分区成 12 个表,每个小表表示特定年份内一个月的数据。任何需要特定月份数据的查询只需引用相应月份的表。
而垂直分区则是将原始表分成多个只包含较少列的表。
表散列与水平分割相似,但没有水平分割那样的明显分割界限,