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 示例:
- 创建目录:
C:\app\oracle\product\19c\dbhome_1 - 将 ZIP 解压到该目录(不要用 WinRAR 直接双击安装!必须解压到目标目录)
- 以管理员身份运行:
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 卸载步骤:
-
停止服务:
powershellnet stop OracleServiceORCL net stop OracleOraDB19Home1TNSListener -
使用 Universal Installer:
- 开始菜单 → Oracle - OraDB19Home1 → Configuration and Migration Tools → Universal Installer
- 选择 "Deinstall Product" → 删除
Oracle Database 19c
-
手动清理
(可选):
- 删除目录:
C:\app\ - 删除注册表项(谨慎操作):
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
- 删除目录:
⚠️ 注意:卸载前务必备份重要数据!
七、启动与关闭数据库实例(详细命令)
前提:已安装 Oracle,环境变量 ORACLE_HOME 和 PATH 已配置
启动数据库实例
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; -- 强制终止(仅用于紧急情况)
💡 提示:
STARTUP和SHUTDOWN是 SQL*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、备份恢复等)的详细语法文档,欢迎继续提供大纲。