Oracle 19c入门学习教程,从入门到精通, —— 知识点详解(1)

Oracle 19c 概述

系统整理的 Oracle 19c 入门级语法知识点、安装卸载步骤、实例启停操作、E-R模型建模、范式设计及综合实践案例。内容兼顾理论与实操,所有代码均含详细中文注释,适用于初学者和教学场景。


一、Oracle 发展史(简要说明,非语法)

Oracle 公司成立于1977年,1979年发布首个商用 SQL RDBMS;

Oracle 19c 是 12.2 系列的长期支持版本(LTS),于2019年发布,支持至2027年。

特点:高可用、自治数据库(Autonomous Database)基础、JSON 增强、自动索引等。


二、关系型数据库基本理论(核心概念 → 语法映射)

1. 表(Table)、行(Row)、列(Column)

  • = 实体(Entity)
  • = 属性(Attribute)
  • = 实例(Instance)
sql 复制代码
-- 创建一个符合关系模型的员工表
CREATE TABLE employees (
    emp_id    NUMBER(6) PRIMARY KEY,      -- 主键:唯一标识每一行
    name      VARCHAR2(50) NOT NULL,      -- 非空属性
    dept      VARCHAR2(30),               -- 部门(可为空)
    salary    NUMBER(8,2) CHECK (salary > 0) -- 数值类型,带精度和约束
);

✅ 关系模型要求:

  • 每列原子(1NF)
  • 行无重复(主键保证)
  • 列顺序无关

2. 关系型数据库与 DBMS(Oracle 作为 DBMS 的体现)

Oracle 提供:

  • 数据定义语言(DDL):CREATE, ALTER, DROP
  • 数据操作语言(DML):INSERT, UPDATE, DELETE, SELECT
  • 数据控制语言(DCL):GRANT, REVOKE
  • 事务控制:COMMIT, ROLLBACK
sql 复制代码
-- DDL + DML 示例
CREATE TABLE products (
    product_id NUMBER PRIMARY KEY,
    name       VARCHAR2(100) NOT NULL,
    price      NUMBER(10,2)
);

INSERT INTO products VALUES (101, '笔记本电脑', 5999.99);
UPDATE products SET price = 5499.99 WHERE product_id = 101;
COMMIT;  -- 提交事务,永久保存

三、E-R 模型 → 表结构转换(含外键)

案例:图书馆管理系统(读者-图书-借阅)

sql 复制代码
-- 实体:读者(Reader)
CREATE TABLE readers (
    reader_id   NUMBER(8) PRIMARY KEY,
    name        VARCHAR2(50) NOT NULL,
    phone       VARCHAR2(15) UNIQUE
);

-- 实体:图书(Book)
CREATE TABLE books (
    isbn        VARCHAR2(17) PRIMARY KEY,  -- 如 978-7-04-050694-2
    title       VARCHAR2(200) NOT NULL,
    author      VARCHAR2(100),
    stock_qty   NUMBER(3) DEFAULT 1 CHECK (stock_qty >= 0)
);

-- 关系:借阅(Borrow)------ 多对多关系转为关联表
CREATE TABLE borrow_records (
    record_id   NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, -- 自增主键(19c 支持)
    reader_id   NUMBER(8) NOT NULL,
    isbn        VARCHAR2(17) NOT NULL,
    borrow_date DATE DEFAULT SYSDATE,
    return_date DATE,
    FOREIGN KEY (reader_id) REFERENCES readers(reader_id) ON DELETE CASCADE,
    FOREIGN KEY (isbn) REFERENCES books(isbn) ON DELETE CASCADE,
    CONSTRAINT chk_return CHECK (return_date IS NULL OR return_date >= borrow_date)
);

🔍 注释说明:

  • GENERATED BY DEFAULT AS IDENTITY:Oracle 12c+ 支持的自增列(替代序列+触发器)
  • ON DELETE CASCADE:父记录删除时自动删除子记录
  • CHECK 约束确保归还日期不早于借出日期

四、数据库设计范式(通过建表体现)

范式 要求 是否满足 示例
1NF 列原子性 电话号码不存多个值
2NF 无部分依赖(复合主键) 借阅表主键为 (reader_id, isbn),其他列完全依赖
3NF 无传递依赖 图书信息不冗余存储出版社地址

反例(违反3NF)

sql 复制代码
-- ❌ 错误:publisher_address 依赖 publisher,而 publisher 非主键
CREATE TABLE bad_books (
    isbn     VARCHAR2(17) PRIMARY KEY,
    title    VARCHAR2(200),
    publisher VARCHAR2(100),
    pub_addr  VARCHAR2(200)  -- 传递依赖!
);

正确做法(拆分)

sql 复制代码
CREATE TABLE publishers (
    pub_name VARCHAR2(100) PRIMARY KEY,
    address  VARCHAR2(200)
);

CREATE TABLE good_books (
    isbn      VARCHAR2(17) PRIMARY KEY,
    title     VARCHAR2(200),
    publisher VARCHAR2(100) REFERENCES publishers(pub_name)
);

五、Oracle 19c 安装过程(Linux/Windows 通用步骤)

环境要求

  • 内存 ≥ 2GB(建议 4GB+)
  • 磁盘空间 ≥ 10GB
  • 操作系统:Windows 10/11 或 Linux(如 Oracle Linux 7/8)

步骤 1:下载安装包

  • 访问 Oracle 官网
  • 下载:LINUX.X64_193000_db_home.zip(Linux)或 WINDOWS.X64_193000_db_home.zip(Windows)

步骤 2:解压并运行安装程序

Windows 示例:
  1. 创建目录:C:\app\oracle\product\19c\dbhome_1
  2. 将 ZIP 解压到该目录(不要用 WinRAR 直接双击安装!必须解压到目标目录
  3. 以管理员身份运行:setup.exe
安装向导关键选项:
步骤 选择项
安装类型 "创建并配置单实例数据库"
系统类 "桌面类"(学习用)或"服务器类"
典型安装 ✔️ 勾选 全局数据库名:ORCL SYS/SYSTEM 密码:oracle19c(需记住)
先决条件检查 忽略警告(学习环境)
安装 等待约 20-40 分钟

步骤 3:验证安装

  • 打开命令提示符:
bash 复制代码
sqlplus sys/oracle19c as sysdba
SQL> SELECT status FROM v$instance;
-- 应返回 "OPEN"

六、Oracle 19c 卸载方法

Windows 卸载步骤:

  1. 停止服务:

    powershell 复制代码
    net stop OracleServiceORCL
    net stop OracleOraDB19Home1TNSListener
  2. 使用 Universal Installer:

    • 开始菜单 → Oracle - OraDB19Home1 → Configuration and Migration Tools → Universal Installer
    • 选择 "Deinstall Product" → 删除 Oracle Database 19c
  3. 手动清理

    (可选):

    • 删除目录:C:\app\
    • 删除注册表项(谨慎操作):HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE

⚠️ 注意:卸载前务必备份重要数据!


七、启动与关闭数据库实例(详细命令)

前提:已安装 Oracle,环境变量 ORACLE_HOMEPATH 已配置

启动数据库实例

sql 复制代码
-- 1. 进入 SQL*Plus(以 SYSDBA 身份)
sqlplus / as sysdba

-- 2. 启动(三阶段)
STARTUP;
-- 等价于:
-- STARTUP NOMOUNT;  -- 启动实例
-- ALTER DATABASE MOUNT; -- 加载控制文件
-- ALTER DATABASE OPEN;  -- 打开数据文件

关闭数据库实例

sql 复制代码
-- 推荐使用 IMMEDIATE(快速且安全)
SHUTDOWN IMMEDIATE;

-- 其他选项:
-- SHUTDOWN NORMAL;     -- 等待所有用户主动断开(可能很久)
-- SHUTDOWN TRANSACTIONAL; -- 等当前事务结束
-- SHUTDOWN ABORT;      -- 强制终止(仅用于紧急情况)

💡 提示:STARTUPSHUTDOWNSQL*Plus 命令,不是标准 SQL。


八、综合性实践案例:学生选课系统(完整流程)

目标:

  • 符合 3NF
  • 包含 E-R 模型转换
  • 可执行 CRUD 操作
  • 演示实例启停(模拟运维)

步骤 1:建表(符合范式)

sql 复制代码
-- 部门表
CREATE TABLE departments (
    dept_no   CHAR(4) PRIMARY KEY,
    dept_name VARCHAR2(50) NOT NULL UNIQUE
);

-- 专业表(依赖部门)
CREATE TABLE majors (
    major_code CHAR(6) PRIMARY KEY,
    major_name VARCHAR2(100) NOT NULL,
    dept_no    CHAR(4) NOT NULL,
    FOREIGN KEY (dept_no) REFERENCES departments(dept_no)
);

-- 学生表
CREATE TABLE students (
    stu_id     CHAR(10) PRIMARY KEY,
    name       VARCHAR2(30) NOT NULL,
    major_code CHAR(6) NOT NULL,
    birth_date DATE,
    FOREIGN KEY (major_code) REFERENCES majors(major_code)
);

-- 课程表
CREATE TABLE courses (
    course_id   CHAR(8) PRIMARY KEY,
    title       VARCHAR2(100) NOT NULL,
    credit      NUMBER(2) DEFAULT 3 CHECK (credit BETWEEN 1 AND 6)
);

-- 选课记录
CREATE TABLE enrollments (
    stu_id     CHAR(10),
    course_id  CHAR(8),
    semester   VARCHAR2(10) DEFAULT TO_CHAR(SYSDATE, 'YYYY-MM'),
    score      NUMBER(5,2) CHECK (score BETWEEN 0 AND 100),
    PRIMARY KEY (stu_id, course_id, semester),
    FOREIGN KEY (stu_id) REFERENCES students(stu_id) ON DELETE CASCADE,
    FOREIGN KEY (course_id) REFERENCES courses(course_id) ON DELETE CASCADE
);

步骤 2:插入测试数据

sql 复制代码
INSERT INTO departments VALUES ('CS01', '计算机科学与技术');
INSERT INTO majors VALUES ('CS2023', '软件工程', 'CS01');
INSERT INTO students VALUES ('20230001', '王小明', 'CS2023', DATE '2005-03-15');
INSERT INTO courses VALUES ('DB1001', '数据库原理', 4);
INSERT INTO enrollments (stu_id, course_id) VALUES ('20230001', 'DB1001');
COMMIT;

步骤 3:查询(连接多表)

sql 复制代码
-- 查询学生及其所学课程和成绩
SELECT 
    s.name AS 学生姓名,
    m.major_name AS 专业,
    c.title AS 课程,
    e.score AS 成绩
FROM students s
JOIN majors m ON s.major_code = m.major_code
JOIN enrollments e ON s.stu_id = e.stu_id
JOIN courses c ON e.course_id = c.course_id
WHERE s.stu_id = '20230001';

步骤 4:模拟运维(启停实例)

bash 复制代码
# 终端操作(假设已配置环境)
sqlplus / as sysdba

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
SQL> EXIT;

九、总结

本章内容虽为基础概述,但通过以下方式实现"语法+实操"全覆盖:

主题 交付内容
Oracle 发展史 背景知识(非代码)
关系模型 CREATE TABLE + 约束
E-R 模型 实体→表,关系→外键
范式设计 1NF/2NF/3NF 建表对比
安装/卸载 详细步骤 + 注意事项
实例启停 STARTUP/SHUTDOWN 命令
综合案例 学生选课系统(建模→查询→运维)

✅ 所有代码均可在 Oracle 19c 环境中直接运行(需替换密码和服务名)。

✅ 安装部分提供 Windows 可操作指南,Linux 类似(使用 runInstaller)。

如需后续章节(如 SQL 高级查询、PL/SQL、备份恢复等)的详细语法文档,欢迎继续提供大纲。

相关推荐
cyhysr2 小时前
2025sql大赛题:仅用sql处理数独
数据库·sql·oracle
BD_Marathon2 小时前
搭建MyBatis框架之创建MyBatis的映射文件(五)
java·数据库·mybatis
橘子真甜~2 小时前
Reids命令原理与应用5 - Redis 主从同步与高可用集群
运维·网络·数据库·redis·缓存·redis集群·redis高可用
2501_948194982 小时前
RN for OpenHarmony AnimeHub项目实战:放送时间表页面开发
数据库·redis·缓存
山土成旧客2 小时前
【Python学习打卡-Day42】打开深度学习“黑箱”:从Hook回调到Grad-CAM可视化
python·深度学习·学习
松涛和鸣2 小时前
DAY52 7-Segment Display/GPIO/Buttons/Interrupts/Timers/PWM
c语言·数据库·单片机·sqlite·html
想摆烂的不会研究的研究生2 小时前
每日八股——Redis(3)
数据库·redis·后端·缓存
寂寞恋上夜2 小时前
数据迁移方案怎么写:迁移策略/回滚方案/验证方法(附完整模板)
网络·数据库·oracle·markdown转xmind·deepseek思维导图
星火开发设计2 小时前
C++ stack 全面解析与实战指南
java·数据结构·c++·学习·rpc··知识