1.1 Oracle翻译为“甲骨文”,由Oracle公司推出。
1.2 关系型数据库
1.2.1 数据库管理技术发展经历了 人工管理、文件系统、数据库系统3个阶段。数据库系统主要由层次模型、网状模型、关系模型。
1.2.2 E-R图由 实体、属性、联系组成。
1.2.3 数据库设计范式,一般满足前3个就足够。第一范式:列不可分割原子性。第二范式:要有主键,且其他键依赖主键。第三范式:不存在非关键字列对任意候选关键字列的传递函数依赖。
2.1 Oracle数据库管理系统3个关键概念 实例、数据库、数据库服务器。数据库存储结构分为:逻辑存储结构、物理存储结构。
2.2 逻辑存储结构:由小到大分为 数据块、数据区、数据段、逻辑对象、表空间、数据库。
2.3 物理存储结构:数据文件、控制文件、重做日志文件、归档日志文件、参数文件、口令文件、警告日志文件等。
2.4Oracle服务器主要由 实例、数据库、程序全局区、前台进程组成。
2.5数据字典:存放数据信息的地方。可以查看数据库的表、视图、等等信息。
常用PL/SQL Developer,不使用命令,故了解即可。
其他博主总结:SQL*Plus 命令
4.1.1 SQL全称是结构化查询语言。特点:1集合性 2统一性 3易于移植性
4.1.2 1数据查询语言DQL、2数据操作语言DML、3事务控制语言TCL、4数据定义语言DDL、5数据控制语言DCL
4.1.3 SQL关键字不区分大小写。但字符值区分大小写。
4.2 Oracle为了便于管理用户创建的数据库对象(比如数据库、索引、视图等),引入了模式的概念。(就是常说的“用户C1”)。模式对象就是这个模式包含的所有内容。Oracle提供示例模式SCOTT。
4.3 select语法格式:
select {[distinct|all] columns|* }
[into table_name]
from {tables |views |other select}
[where conditions]
[group by columns]
[having conditions]
[order by colimns]
4.3 多表关联查询
4.4 常用系统函数
4.4.1 字符类函数:ASCII©返回字符ASCII码、CHR(I)返回ASCII码的字符、CONCAT(s1,s2)连接、INITCAP(s)驼峰、INSTR(s1,s2[,i][,j])查找s2在s1中位置、LENGTH(s)返回字符长度、LOWER(s)/UPPER(s)大小写转换、LTRIM(s1,s2)/RTRIM(s1,s2)/TRIM(s1,s2)去掉两边字符、REPLACE(s1,s2[,s3])替换字符、SUBSTR(s,i,[j])截取字符。
4.4.2 数字类函数:ABS(n)绝对值、MOD(n1,n2)取模。
4.4.3 日期和时间类函数:ADD_MONTHS(d,i)在d上加i月、MONTHS_BETWEEN(d1,d2)返回d1与d2之间的数目、SYSDATE()获取当前日期。
4.4.4 转换类函数:TO_CHAR()、TO_DATE()、TO_NUMBER()。
4.4.5 聚合类函数:MIN()、MAX()、COUNT()、SUM()。
4.5 子查询的使用
4.6 操作数据库
4.6.1 插入数据语法:
INSERT INTO table_name [(column_name1[,column_name2]…)]
VALUES(express1[,express2]…)
或省略VALUES用select语句替换。select子句中的列名可以和insert子句中的不一致,但类型必须是兼容的。
4.6.2 更新数据语法:
UPDATE table_name
SET {column_name1=express1[,column_name2=express2…]
|(column_name1[,column_name2…])=(selectSubquery)}
[WHERE condition]
4.6.3 删除数据语法:
DELETE FROM table_name
[WHERE condition]
或
TRUNCATE table_name truncate速度快,因为其不产生回滚记录。
4.7事务处理
5.1 概述
5.2数据类型
5.3 流程控制语句
5.4 游标(显式游标、隐式游标、具有引用类型特性的REF游标)
5.5 PL/SQL 异常处理
6.1 存储过程
6.1.1创建存储过程
create [or replace] procedure pro_name [(parameter1[,parameter2]…)] is|as
[inner_variable]
begin
plsql_sentences;
[exception]
[dowith_sentences;]
end [pro_name];
执行存储过程
6.1.2存储过程的参数(包括IN、OUT、INOUT)
IN模式,输入类型参数,存储过程只能读取。默认模式。可以指定名称传递(parname=>value,…)、按位置传递。有默认值可以不传递参数。指定名称传递后之后的都需指定名称传递。
OUT模式,输出类型参数,存储过程可以修改其值。
INOUR模式,输入输出类型参数。即可读取也可修改。
6.2 函数
6.2.1 函数的创建
create [or replace] function fun_name ([parameter1[, parameter2]…]) return data_type is
[inner_variable]
begin
plsql_sentence;
[exception]
[dowith_sentences];
end [fun_name];
调用函数:调用函数时必须使用一个变量来保存函数的返回值。如:avg:=get_avg(10);
删除函数:drop function fun_name;
6.3 触发器
6.3.1 触发器可以看作是一种特殊的存储过程,它定义了一些与数据库相关的事件(触发事件DML、DDL、数据库系统事件、用户事件等)发生时应执行的“功能代码块”。
语法:
create [or replace] trigger tri_name
[before | after | instead of] tri_event
on table_name | view_name |user_name |db_name
[for each row] [ when tri_condition]
begin
plsql_sentences;
end tri_name;
行级触发器、语句级触发器、替换触发器、用户事件触发器、系统事件触发器。
前触发适合强化安全性、启用业务逻辑和进行日志记录。后触发适合记录操作或做某些事后处理。
6.3.2 语句级触发器:就是针对一条DML语句的触发器,不使用for each row ,无论操作多少行,只触发一次。
6.3.3 行级触发器
6.3.4 替换触发器
6.3.5 用户事件触发器
6.4 程序包
程序包由PL/SQL程序元素(如变量、类型)和匿名PL/SQL块(如游标)、命名PL/SQL块(如存储过程和函数)组成。
在PL/SQL块中使用dbms_output.put_line语句就是程序包的一个应用。
6.4.1 程序包头
语法:
create [for replace] package pack_name is
[declare_variable];
[declare_type];
[declare_curosr];
[declare_function];
[declare_procedure];
end [pack_name];
6.4.2 程序包体
包含了程序包头中声明的对象。
语法:
create [or replace] package body pack_name is
[inner_variable]
[cursor_body]
[function_title]
{begin
fun_plsql;
[exception]
[doeith_sentences];
end [fun_name]}
[procedure_title]
{begin
pro_plsql;
[exception]
[dowith_sentences;]
end [pro_name]}
…
end [pack_name];
9.2 创建数据表
在创建数据表时,Oracle将在一个指定的表空间中为其分配存储空间。
Oracle内置的数据类型:
9.2.2 创建数据表语法
CREATE TABLE table_name
{
列名 数据类型 约束|默认值,
…
表级约束|主键|外键
}
也可以使用
CREATE TABLE table_name as select …
9.3 维护数据表
9.3.1 增加和删除字段
9.3.2 修改字段
9.3.3 重命名表名
9.3.4 改变表空间和存储参数
1修改表空间:若要将一个“非分区”表移动到一个新的表空间,则可以使用
alter table table_name move tablespace newtbsp_name;
2修改存储参数:alter table table_name pctfree newvalue pctused newvalue;
9.3.5删除表
9.3.6 修改表状态
9.4 数据完整性和约束性:非空约束、主键约束、唯一约束、外键约束、检查约束、默认约束。
10.1 索引对象
10.2 视图对象:数据库只在数据字典中存储视图的定义信息,不存储数据值。
10.2.1 创建视图
create [or replace] view < view_name> [alias[,alias]…]
as < subquery>
[with check option] [constraint constraint_name] --用于定义在视图上的约束
[with read only]
简单视图:单个表,不包含函数、表达式、分组数据时,可以对视图DML操作。
只读视图、复杂视图、连接视图 不可以执行DML。
管理视图:
10.3同义词对象
10.4序列对象
序列是Oracle提供的用于生成一系列唯一数字的数据对象。
创建序列:
create sequence < seq_name>
[start with n] --起始值
[increment by n] --增量正为递增负为递减
[minvalue n | nominvalue] --最小值
[maxvalue n | nomaxvalue] --最大值
[cache n | nocache] --达到极限时是否循环
[cycle | nocycle] --是否产生序列号预分配
[order | noorder] --是否顺序输出
序列伪列:NEXTVAL 、CURRVAL
管理序列,除了序列的起始值START WITH不能被修改外,其他都可以修改。
通过查数据字典USER_SEQUENCES可是获得序列的信息。
可以使用DROP SEQUENCE seq_name 删除序列。
分区功能可以改善应用系统的性能、可管理性和可用性。优点:
11.2 创建表分区
11.2.1 范围分区
根据分区键值指定的范围进行分布,均匀分布时最好。关键字 RANGE
采用范围分区,首先要考虑分区列应该符合范围分区的方法,其次考虑列的数据范围,最后考虑边界问题。
语法:
create table xxx
(
xxx
)
partition by range(clumn_name1[,clumn_name2…])
(
–第一个分区
partition par_01 values less then(参数列的第一个分区最大值,多个参数需填多个) tablespace TBSP_1;
–第二个分区
partition par_02 values less then(参数列的第二个分区最大值,多个参数需填多个) tablespace TBSP_2;
…
);
分区参数可以多个,多个分区也可以分配到同一个表空间。
11.2.2 散列分区
HASH分区,是在列取值难以确定的情况下采用的分区方法。根据分区键值系统计算一个hash值,然后确定将该行存放于哪个表空间。对于范围查询和不等式查询起不到优化作用。一下情况下应该采用:
partition by hash(分区键)
(
partition par_01 tablespace TBSP_1;
…
);
Oracle 11g可以由系统自动分配分区名
partition by hash(clumn_name) --指定分区键
partitions 2 —创建两个分区
store in(tbsp_1,tbsp_2…); —指定不同的命名空间
用户还可以1指定所有分区的初始化分配空间
storage(initial 2048K); --定义表分区的初始化空间大小为2018KB
11.2.3 列表分区
如果某个列的值可以枚举,则可以考虑对表进行列表分区。
partition by list(clumn_name…)
(
partition shandong values(“山东省”);
…
);
11.2.4 组合分区
组合两个数据分区的方法可以成为一个组合分区方法,先用第一种分区,再用第二种再分区。
Oracle对索引组织表(索引和数据一起的表格)不支持组合分区。
partition by range(id) --以id为键创建范围分区
subpartition by hash(name) --以name列为键创建hash分区
subpartitions 2 store in(tbsp_1,tbsp_2) --hash子分区共有两个,有两个命名空间
(
partition par1 values less than(5000), --范围分区,id小于5000
partition par1 values less than(10000),
…
);
11.2.5 interval 分区
Oracle 11g新增的,是范围分区的一种增强。可以实现范围分区的自动化,只有最开始的分区是永久的,之后会根据数据的增加分配更多分区和本地索引。
partition by rang(saldate) --按分区键saldate进行范围分区
interval(numtoyminterval(1,‘year’)) --interval分区实现按年份进行自动分区
(
–第一个永久分区
partition par1 values less then(to_date(‘2020-12-01’,‘yyyy-mm-dd’))
);
创建范围分区后,也可以使用alter table … set interval 扩展为interval分区。
11.3 表分区策略
11.4 管理表分区
11.4.1 添加表分区 ALTER TABLE … ADD PARTITION
alter table table1 add partition hebei values(“河北省”)
storage(inital 10k next 20k) tablespace tbsp_1
nologging;
11.4.2 合并分区
11.4.3 删除分区
11.4.4 并入分区
11.5 创建索引分区
Oracle索引分区分为本地索引分区和全局索引分区。
本地索引分区:就是使用和分区表同样的分区键进行分区的索引。
create index par_name on table_name(clumn_name)
local
(
partition p1 tablespace ts_1,
…
) ;
可以通过DBA_IND_PARTITIONS来查看索引分区信息。
全局索引分区:
就是没有与分区表相同分区键的分区索引,当分区中出现许多事务时,采用全局索引分区。
无论表是否采用分区,都可以对表采用全局索引分区,不能对Cluster表、位图索引采用全局索引分区。
create index index_name on table_name(clumn_name) --全局范围索引分区
global partition by range(clumn_name)
(
partition p1 values less than(number_value),
…
);
global partition by hash(clumn_name); --全局hash索引分区
11.6 管理索引分区
删除索引分区 alter index … drop partition…
删除后若只剩一个索引分区,需要重建 alter index … rebuild partition…
重命名索引分区:alter index index_name rename partition old_name to new_name;
12.1 用户与模式的关系
Oracle提供了一些特权用户,比如SYSDBA、SYSOPER,这类用户用于执行数据库的维护操作,如启动数据库、关闭数据库、建立数据库、备份、还原等操作。
Oracle提供了默认特权用户sys,以特权用户登陆数据库时,必须带有 AS SYSDBA或AS SYSOPER。
connect system/123 as sysdba;
模式或方案实际上是用户所拥有的数据库对象的集合。
12.2 创建与管理用户
12.3 用户权限管理
12.4 角色管理
12.5 资源配置PROFILE