杰瑞科技汇

Oracle数据库怎么用?新手入门指南

Oracle 数据库使用教程

目录

  1. 第一部分:入门准备

    Oracle数据库怎么用?新手入门指南-图1
    (图片来源网络,侵删)
    • 1 什么是 Oracle 数据库?
    • 2 安装与配置
    • 3 连接到数据库
    • 4 基本工具介绍
  2. 第二部分:SQL 语言基础

    • 1 DDL (Data Definition Language) - 数据定义语言
    • 2 DML (Data Manipulation Language) - 数据操纵语言
    • 3 DQL (Data Query Language) - 数据查询语言
    • 4 DCL (Data Control Language) - 数据控制语言
  3. 第三部分:PL/SQL 编程

    • 1 什么是 PL/SQL?
    • 2 变量与常量
    • 3 控制结构
    • 4 异常处理
    • 5 游标
    • 6 存储过程与函数
  4. 第四部分:数据库对象管理

    • 1 索引
    • 2 视图
    • 3 序列
    • 4 同义词
  5. 第五部分:用户与权限管理

    • 1 用户管理
    • 2 权限与角色
  6. 第六部分:数据备份与恢复

    • 1 导出/导入
    • DBMS_DATAPUMP (数据泵)
    • 2 RMAN (Recovery Manager)
  7. 第七部分:性能调优基础

    • 1 执行计划
    • 2 索引优化
    • 3 统计信息
  8. 第八部分:学习资源与最佳实践

    • 1 官方文档
    • 2 推荐书籍
    • 3 最佳实践

第一部分:入门准备

1 什么是 Oracle 数据库?

Oracle 数据库是由 Oracle 公司开发的一款关系型数据库管理系统,它以其强大的功能、高可靠性、安全性和可扩展性而闻名,广泛应用于金融、电信、政府、大型企业等对数据稳定性要求极高的领域。

2 安装与配置

对于初学者,最简单的方式是安装 Oracle Database Express Edition (XE),它是免费的,对硬件资源要求较低,非常适合学习和开发。

  1. 下载:访问 Oracle 官网,搜索 "Oracle Database XE" 并下载对应操作系统的版本。
  2. 安装:按照安装向导进行操作,安装过程中需要设置一个管理员密码(SYS, SYSTEM 等超级用户)。
  3. 配置:安装完成后,XE 会默认启动一个名为 XE 的数据库服务,并监听 1521 端口。

3 连接到数据库

连接 Oracle 数据库需要知道以下信息:

  • 主机名: localhost (如果安装在本机)
  • 端口: 1521 (默认)
  • 服务名: XE (XE 版本的默认服务名)
  • 用户名/密码: 如 SYSTEM/你设置的密码

常用连接方式:

  • *SQLPlus (命令行工具)**

    # 在 Windows 命令提示符或 Linux/macOS 终端中
    sqlplus /nolog
    SQL> conn system/your_password@localhost:1521/XE

    或者直接登录:

    sqlplus system/your_password@localhost:1521/XE
  • SQL Developer (图形化工具)

    1. 下载并安装 SQL Developer (免费)。
    2. 打开软件,点击左上角 "+" 号新建连接。
    3. 填写连接信息:
      • 连接名: 任意,如 My Local DB
      • 用户名: SYSTEM
      • 密码: 你的密码
      • 主机名: localhost
      • 端口: 1521
      • 服务名: XE
    4. 点击 "测试",显示 "成功" 后即可连接。

4 基本工具介绍

  • *SQLPlus**: Oracle 自带的命令行客户端,最基础、最直接的工具,适合脚本化操作。
  • SQL Developer: Oracle 官方提供的免费图形化客户端,功能强大,集成了开发、调试、DBA 管理等多种功能,强烈推荐初学者使用
  • PL/SQL Developer: 第三方付费工具,在 Windows 平台上非常流行,深受开发者喜爱。

第二部分:SQL 语言基础

SQL (Structured Query Language) 是与数据库交互的标准语言,Oracle 的 SQL 实现基于 ANSI 标准,并进行了扩展。

1 DDL (Data Definition Language) - 数据定义语言

用于定义和管理数据库的结构、对象。

命令 描述 示例
CREATE 创建数据库对象 CREATE TABLE employees (id NUMBER, name VARCHAR2(100));
ALTER 修改数据库对象 ALTER TABLE employees ADD (salary NUMBER(10, 2));
DROP 删除数据库对象 DROP TABLE employees;
TRUNCATE 清空表数据(速度快,不可逆) TRUNCATE TABLE employees;
RENAME 重命名对象 RENAME employees TO emp;

2 DML (Data Manipulation Language) - 数据操纵语言

用于操作表中的数据。

命令 描述 示例
INSERT 插入数据 INSERT INTO emp (id, name) VALUES (1, 'Alice');
UPDATE 更新数据 UPDATE emp SET name = 'Bob' WHERE id = 1;
DELETE 删除数据 DELETE FROM emp WHERE id = 1;

注意: DML 操作默认不会立即提交到数据库,需要执行 COMMIT; 才会永久保存,执行 ROLLBACK; 可以撤销未提交的 DML 操作。

3 DQL (Data Query Language) - 数据查询语言

用于从数据库中检索数据。SELECT 是最核心的命令。

-- 基本查询
SELECT id, name FROM emp;
-- 带条件查询
SELECT * FROM emp WHERE salary > 5000 AND department_id = 10;
-- 排序
SELECT * FROM emp ORDER BY salary DESC;
-- 聚合函数
SELECT COUNT(*) AS total_employees, AVG(salary) AS avg_salary FROM emp;
-- 分组
SELECT department_id, COUNT(*) FROM emp GROUP BY department_id HAVING COUNT(*) > 5;

4 DCL (Data Control Language) - 数据控制语言

用于控制数据库的访问权限。

命令 描述 示例
GRANT 授予权限 GRANT SELECT, INSERT ON emp TO scott;
REVOKE 撤销权限 REVOKE INSERT ON emp FROM scott;

第三部分:PL/SQL 编程

PL/SQL 是 Oracle 对 SQL 的过程化扩展,它允许在数据库中编写复杂的逻辑、存储过程、函数等。

1 什么是 PL/SQL?

PL/SQL 将 SQL 语句与过程化语言结构(如变量、循环、条件判断)结合在一起,使得数据库不仅可以存储数据,还可以执行业务逻辑。

2 变量与常量

DECLARE
  v_emp_name VARCHAR2(100);
  v_salary NUMBER(10, 2) := 0;
  c_bonus_rate CONSTANT NUMBER := 0.1; -- 常量
BEGIN
  -- 查询并赋值
  SELECT name INTO v_emp_name FROM emp WHERE id = 1;
  v_salary := v_salary * (1 + c_bonus_rate);
  DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_emp_name); -- || 是连接符
  DBMS_OUTPUT.PUT_LINE('New Salary: ' || v_salary);
END;
/

注意: 在 SQL Developer 中,要查看 DBMS_OUTPUT 的输出,需要先启用它:点击菜单 "视图" -> "DBMS 输出",然后点击绿色 "+" 按钮,选择你的会话。

3 控制结构

-- IF 语句
DECLARE
  v_score NUMBER := 85;
BEGIN
  IF v_score >= 90 THEN
    DBMS_OUTPUT.PUT_LINE('A');
  ELSIF v_score >= 80 THEN
    DBMS_OUTPUT.PUT_LINE('B');
  ELSE
    DBMS_OUTPUT.PUT_LINE('C');
  END IF;
END;
/
-- LOOP 循环
DECLARE
  i NUMBER := 1;
BEGIN
  LOOP
    DBMS_OUTPUT.PUT_LINE(i);
    i := i + 1;
    EXIT WHEN i > 5;
  END LOOP;
END;
/

4 异常处理

使用 EXCEPTION 块来处理运行时错误。

DECLARE
  v_emp_name emp.name%TYPE; -- %TYPE 表示与列名同类型
BEGIN
  -- 尝试查询一个不存在的员工
  SELECT name INTO v_emp_name FROM emp WHERE id = 999;
  DBMS_OUTPUT.PUT_LINE('Found: ' || v_emp_name);
EXCEPTION
  WHEN NO_DATA_FOUND THEN -- 当 SELECT ... INTO 没有返回数据时触发
    DBMS_OUTPUT.PUT_LINE('Error: Employee not found.');
  WHEN OTHERS THEN -- 捕获其他所有异常
    DBMS_OUTPUT.PUT_LINE('An unexpected error occurred: ' || SQLERRM);
END;
/

5 游标

游标用于处理查询返回的多行结果集。

DECLARE
  CURSOR c_emp IS SELECT id, name FROM emp; -- 定义游标
  v_emp_id emp.id%TYPE;
  v_emp_name emp.name%TYPE;
BEGIN
  OPEN c_emp; -- 打开游标
  LOOP
    FETCH c_emp INTO v_emp_id, v_emp_name; -- 从游标中获取一行数据
    EXIT WHEN c_emp%NOTFOUND; -- 当没有更多数据时退出循环
    DBMS_OUTPUT.PUT_LINE('ID: ' || v_emp_id || ', Name: ' || v_emp_name);
  END LOOP;
  CLOSE c_emp; -- 关闭游标
END;
/

6 存储过程与函数

将 PL/SQL 代码块存储在数据库中,以便重复调用。

存储过程

CREATE OR REPLACE PROCEDURE raise_salary (
  p_emp_id IN NUMBER,
  p_amount IN NUMBER
) AS
BEGIN
  UPDATE emp SET salary = salary + p_amount WHERE id = p_emp_id;
  COMMIT;
  DBMS_OUTPUT.PUT_LINE('Salary raised for employee ' || p_emp_id);
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('Employee ' || p_emp_id || ' not found.');
END raise_salary;
/

调用存储过程:

EXECUTE raise_salary(1, 500);

函数 函数必须返回一个值。

CREATE OR REPLACE FUNCTION get_employee_name (
  p_emp_id IN NUMBER
) RETURN VARCHAR2 AS
  v_name emp.name%TYPE;
BEGIN
  SELECT name INTO v_name FROM emp WHERE id = p_emp_id;
  RETURN v_name;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    RETURN 'Unknown';
END get_employee_name;
/

调用函数:

SELECT get_employee_name(1) FROM DUAL;

第四部分:数据库对象管理

1 索引

索引是用于提高查询性能的数据结构,它类似于书的目录。

-- 创建索引
CREATE INDEX idx_emp_name ON emp(name);
-- 删除索引
DROP INDEX idx_emp_name;

何时创建索引:经常用于 WHEREJOINORDER BY 子句的列。 注意事项:索引虽然加快查询,但会降低 INSERT, UPDATE, DELETE 的速度,并占用存储空间。

2 视图

视图是一个虚拟表,其内容由查询定义,它简化了复杂查询,并可以隐藏底层表的结构。

-- 创建视图
CREATE VIEW v_employees AS
SELECT id, name, department_id FROM emp WHERE salary > 4000;
-- 使用视图
SELECT * FROM v_employees WHERE department_id = 20;
-- 删除视图
DROP VIEW v_employees;

3 序列

序列用于生成唯一的数字序列,通常用作主键。

-- 创建序列
CREATE SEQUENCE seq_emp_id
  START WITH 1
  INCREMENT BY 1
  NOCACHE
  NOCYCLE;
-- 使用序列
INSERT INTO emp (id, name) VALUES (seq_emp_id.NEXTVAL, 'Charlie');

4 同义词

同义词是数据库对象(如表、视图、序列)的别名,可以简化访问,特别是跨用户访问时。

-- 创建同义词
CREATE SYNONYM emp FOR hr.employees; -- 假设 hr 用户下有 employees 表
-- 现在可以直接用 emp 访问 hr.employees
SELECT * FROM emp WHERE ROWNUM <= 5;

第五部分:用户与权限管理

1 用户管理

在 Oracle 中,用户即 schema,拥有自己的对象集合。

-- 连接到管理员 (如 SYSTEM)
-- 创建新用户
CREATE USER scott IDENTIFIED BY tiger;
-- 删除用户 (如果用户有对象,需加上 CASCADE)
DROP USER scott CASCADE;

2 权限与角色

直接授予用户权限会很繁琐,通常使用角色来管理权限集。

-- 1. 创建角色
CREATE ROLE developer_role;
-- 2. 授予角色权限
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO developer_role;
-- 3. 将角色授予用户
GRANT developer_role TO scott;
-- 4. 撤销权限
REVOKE CREATE VIEW FROM developer_role;

第六部分:数据备份与恢复

1 导出/导入

这是最常用的逻辑备份方式。

  • expdp (Data Pump Export)

    # 导出整个 SCOTT 用户的所有数据
    expdp scott/tiger DIRECTORY=dpump_dir DUMPFILE=scott.dmp SCHEMAS=scott

    (需要先在数据库中创建 DIRECTORY 对象并授权)

  • impdp (Data Pump Import)

    # 导入数据
    impdp scott/tiger DIRECTORY=dpump_dir DUMPFILE=scott.dmp FULL=y

2 RMAN (Recovery Manager)

RMAN 是 Oracle 强大的物理备份工具,直接与数据库文件交互,是生产环境的首选。

-- 连接到 RMAN
rman target /  -- 连接到本地数据库
-- 执行备份
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
-- 查看备份
RMAN> LIST BACKUP;

第七部分:性能调优基础

1 执行计划

执行计划是数据库引擎为执行 SQL 查询而制定的“操作计划”,分析它是优化的第一步。

-- 在 SQL*Plus 或 SQL Developer 中
EXPLAIN PLAN FOR
SELECT * FROM emp WHERE salary > 5000;
-- 查看执行计划
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

关注点:

  • TABLE ACCESS FULL: 全表扫描,通常很慢,应尽量避免。
  • INDEX RANGE SCAN: 索引范围扫描,通常比全表扫描快。
  • COST: 成本值,越小越好。

2 索引优化

确保在 WHEREJOIN 条件中频繁使用的列上创建合适的索引,但并非越多越好,过多的索引会影响写入性能。

3 统计信息

Oracle 的优化器依赖统计信息来选择最佳执行计划,当数据量变化很大后,需要更新统计信息。

-- 收集整个数据库的统计信息
EXEC DBMS_STATS.GATHER_DATABASE_STATS;
-- 收集特定表的统计信息
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT', 'EMP');

第八部分:学习资源与最佳实践

1 官方文档

2 推荐书籍

  • 《Oracle Database 12c SQL》: 由 Jason Price 编写,非常适合初学者学习 SQL。
  • 《Oracle PL/SQL Programming》: 由 Steven Feuerstein 编写,被誉为 PL/编程领域的“圣经”。

3 最佳实践

  1. 始终使用绑定变量: 在动态 SQL 中,使用 variable_name 代替直接拼接字符串,可以共享游标,提高性能并防止 SQL 注入。
  2. *谨慎使用 `SELECT `**: 明确列出所需的列,提高可读性,避免不必要的 I/O。
  3. 为表和列添加注释: 使用 COMMENT ON TABLE ...COMMENT ON COLUMN ...,让代码更具可维护性。
  4. 遵循命名规范: 统一的命名规范(如使用下划线分隔单词)能让数据库结构更清晰。
  5. 定期备份: 制定并严格执行备份策略,是数据库管理的重中之重。
  6. 监控性能: 关注慢查询,定期分析执行计划,持续优化。

这份教程为你提供了一个 Oracle 数据库学习的全景图,真正的掌握需要大量的实践,建议你安装好环境后,跟着示例一步步操作,并尝试构建自己的项目和练习,祝你学习顺利!

分享:
扫描分享到社交APP
上一篇
下一篇