Oracle学习笔记 - 第003天

Oracle详解

数据库基础

  1. 起源:人工管理、文件系统、数据库系统
  2. 主要特征:结构化、数据共享、减少冗余、独立性。
  3. 相关概念:DB、DBS、DBA、DBMS
  4. 关系型数据库
    • 理论基础:集合论+关系代数
    • 用二维表组织数据:行、列、主键、外键、约束、索引、……
    • 支持SQL(结构化查询语言):DDL、DML、DQL、DCL,以集合的方式处理数据,本身不区分大小写,但是对字符值进行处理时是区分大小写的
    • E-R图:1-1、1-N、N-M
    • 范式理论:1NF、2NF、3NF、BCNF、……

概述

发展史

  • 1970年 IBM的Codd博士发表A Relational Model of Data for Large Shared Data Banks
  • 1978年 Oracle 1 汇编语言 PDP-11
  • 1983年 Oracle 3 C语言
  • 1993年 Oracle 7 UNIX系统
  • 1997年 Oracle 8 Java
  • 1999年 Oracle 8i Internet
  • 2001年 Oracle 9i 支持RAC(Real Application Clusters) / BI
  • 2003年 Oracle 10g 网格计算
  • 2007年 Oracle 11g
  • 2013年 Oracle 12c 云计算

网格计算和云计算

网格计算:使用公用设施进行计算,不必关心数据的位置以及由哪台计算机进行计算,就像使用电网一样,不需要知道发电机的位置以及电网的连接方式。网格计算改变了企业使用资源的方式,使得数据中心等系统可以跨服务器使用资源。
云计算:一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储、应用软件、服务等),这些资源能够被快速提供,只需投入很少的管理工作或与服务供应商进行很少的交互。

安装和启动

  1. Windows环境安装非常简单;Linux环境需要先检查内存、磁盘、操作系统版本、依赖包安装情况、编译器版本等,然后要配置内核参数、创建用户和用户组并添加用户的限制参数,此外还要创建安装目录、环境变量并将安装用的压缩包解压之后才能开始安装。
  2. 可以使用DBCA(Database Configuration Assistant来)来创建数据库实例。
  3. Windows系统可以在“服务”中启动和关闭Oracle的监听和实例,也可以通过命令的方式来启动监听(lsnrctl)和实例;Linux系统可以在SQL*Plus下使用startup和shutdown命令来启动和关闭实例。

体系结构

实例:非固定的基于内存的基本进程。
数据库:固定的、基于磁盘的数据文件、控制文件、日志文件、参数文件和归档日志文件等。

一般情况下,Oralce数据库都是一个数据库包含一个实例。

在Oracle系统中,表空间和数据文件是Oracle数据库结构的基本要素。

表空间:存放数据库表、索引、回滚段等对象的逻辑磁盘空间。

  • SYSTEM表空间:存放数据字典
  • SYSAUX表空间:
  • UNDO表空间:存储撤销信息
  • USERS表空间:存储用户创建的对象
  • TEMP表空间:
  • EXAMPLE表空间

数据文件:每个表空间可以包含一个或多个数据文件,可以在创建表空间时创建一个或多个数据文件,也可以对已经存在的表空间追加新的数据文件。

select file_name, tablespace_name, bytes from dba_data_files;

控制文件:存储Oracle实例信息、数据文件信息、日志文件信息的内部二进制文件,控制文件是Oracle实例启动时必须访问的文件。

select name from v$controlfile;

日志文件:记录数据库所有发生的事务以及由Oracle内部行为引起的数据库变化的信息,在数据库恢复时,可以从日志文件中读出原来的数据。在创建表空间是可以使用nologging选项指定不产生日志。

select member from v$logfile;

常用操作

数据类型

数据类型 说明
VARCHAR2(n) 变长字符串,n<=4000
CHAR(n) 定长字符串,n<=2000
NUMBER(p,s) 整数或浮点数,p+s<=38
DATE 日期
TIMESTAMP 时间日期
BINARY_FLOAT 浮点数(32位)
BINARY_DOUBLE 双精度浮点数(64位)
BLOB 二进制大对象
CLOB 字符大对象
BFILE 外部二进制文件

创建表

create table tb_goods
(
gid number(8),
gname varchar2(50) not null,
gdesc varchar2(500),
gcurprice number(10, 2) not null,
) tablespace user;

删除表

drop table tb_goods;

修改表

alter table tb_goods add constraint pk_gid primary key (gid);
alter table tb_goods add column goldprice number(10, 2) not null;

约束:约束通常也称为完整性约束(实体完整性、参照完整性和域完整性),主要通过主键、外键、检查、非空、唯一、默认值等来实现。

序列:生成唯一的整数,通常用于自增主键。

create sequence seq_gid start with 10000000 increment by 1;

select seq_gid.nextval from dual;

drop sequence seq_gid;

视图:视图通常被认为是“存储的查询”或“虚拟的表“,它本身并不包含数据而是一个到表的映射,视图的作用主要是简化查询要使用的语句,同时也可以将操作限制到指定的列,起到安全和保密的作用。

create or replace view v_emp_dept as 
select ename, dname, job, sal from scott.emp t1, scott.dept t2
where t1.deptno=t2.deptno;

drop view v_emp_dept;

同义词:同义词是数据库对象的别名,可以用来保护数据库对象的隐私。

create public synonym emp for scott.emp;
drop synonym emp;

索引:索引是关系数据库中用于存放表中每条记录位置的一种对象,其主要作用是加快数据检索速度,其设计的合理性对系统性能有直接的影响。

create unique index uni_idx_goods on tb_goods (gid);
create index idx_goods_name on tb_goods (gname) cluster;

创建函数

create or replace function fn_factorial (n number) 
return number is
i number := 1;
result number := 1;
begin
for i in 1..n loop
    result := result * i;
end loop;
return result;
end fn_factorial;

创建存储过程

create or replace procedure sp_get_avg_sal_by_dept_no(
dno dept.deptno%type, avgSal out emp.sal%type) as
begin
  select avg(sal) into avgSal from emp where deptno=dno;
end sp_get_avg_sal_by_dept_no;

创建触发器

create or replace trigger tr_update_deptno
after update on dept
for each row
begin
  update emp set deptno=:new.deptno where deptno=:old.deptno;
end;

创建用户并授权

create user luohao identified by 123123 password expire;
grant create session to luohao with admin option;

PL/SQL

declare

begin

exception

end
declare
    type t_table_of_num is table of emp.empno%type index by binary_integer;
    v_empno_array t_table_of_num;
begin
    v_empno_array(0) := 1234;
    v_empno_array(1) := 4321;
end; 
declare
    type t_record_stu is record (
        stuid number(4),
        stuname varchar2(20),
        stubirth date
    );
    v_stu t_record_stu;
begin
    v_stu.stuid := 1001;
    v_stu.stuname := 'Hao';
    v_stu.stubirth := to_date('1980-11-28', 'yyyy-mm-dd');
end;
declare 
    cursor c is select * from emp;
    v_emp c%rowtype;
begin
    open c;
    loop
        fetch c into v_emp;
        exit when (c%notfound);
        ... ...
    end loop;
    close c;
declare 
    cursor c is select * from emp;
begin
    for v_emp in c loop
        ... ...
    end loop;
end;
declare 
    cursor c is select * from emp for update;
begin
    delete ... where current of c;
    update ... where current of c;
end;
declare
    type t_cur_emp is ref cursor return emp%rowtype;
    v_emp_c t_cur_emp;
begin
    if not v_emp_c%isopen then
        open v_emp_c for select * from emp;
    end if;
    ... ...
end;

注意:

  1. select语句必须且只能返回一条记录而且要使用into存入对应的变量中
  2. sql%rowcount - 受影响的行数
  3. execute immediate
  4. too_many_rows / no_data_found / login_denied / dup_val_index / zero_divide / value_error / case_not_found
  5. SQLCODE / SQLERRM
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容