Oracle 基础入门:核心概念与实操指南(视频教程)

Oracle 基础入门:核心概念与实操指南

  • Oracle 是全球领先的关系型数据库管理系统(RDBMS),以稳定性、安全性和高性能著称,广泛应用于企业级系统。本文从核心概念、环境准备、基础操作、常用对象、SQL 核心语法五个维度,帮你快速掌握 Oracle 基础。
  • 视频教程:https://pan.quark.cn/s/bcbe74d71b6d

一、核心概念梳理

1. 数据库与实例

  • 数据库(Database):物理存储的集合(数据文件、控制文件、日志文件等),Oracle 中一个数据库可对应多个实例(RAC 集群场景)。
  • 实例(Instance):数据库启动后,内存结构(SGA)+ 后台进程(DBWR、LGWR、CKPT 等)的总称,是"运行中的数据库"。
  • 关系:实例是数据库的"访问入口",单机环境下通常"一个实例对应一个数据库"。

2. 用户与模式(Schema)

  • 用户(User) :数据库的访问账号(如 SYSSYSTEM、普通用户),需分配权限才能操作数据。
  • 模式(Schema) :用户拥有的数据库对象(表、视图、索引等)的集合,默认情况下,用户名将 = 模式名 (如用户 SCOTT 的模式就是 SCOTT,其表 EMP 需通过 SCOTT.EMP 访问)。
  • 内置用户:
    • SYS:超级管理员(需以 SYSDBA 身份登录),管理数据库核心组件;
    • SYSTEM:普通管理员,管理用户、权限等日常运维。

3. 数据文件与表空间

  • 表空间(Tablespace) :逻辑存储单元,用于分类管理数据(如 SYSTEM 系统表空间、USERS 普通用户表空间)。
  • 数据文件(Data File):物理存储文件,表空间由一个或多个数据文件组成(数据最终存在数据文件中)。
  • 关系:数据库 → 表空间 → 数据文件 → 表/数据。

二、环境准备

1. 安装 Oracle

  • 推荐版本:Oracle 11g(入门友好)、Oracle 19c(长期支持版)。

  • 安装介质:官网下载安装包(需注册 Oracle 账号),或使用 Docker 快速部署(推荐新手):

    bash 复制代码
    # Docker 拉取 Oracle 11g 镜像
    docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
    # 启动容器(映射端口 1521,密码 helowin)
    docker run -d -p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

2. 连接工具

  • 命令行:sqlplus(Oracle 自带),如:

    sql 复制代码
    sqlplus sys/helowin as sysdba  -- 管理员登录
    sqlplus scott/tiger@localhost:1521/helowin  -- 普通用户登录(@后为连接串:主机:端口/服务名)
  • 图形化工具(推荐):PL/SQL Developer、Navicat Premium、DataGrip,可视化操作更高效。

3. 连接串格式

复制代码
用户名/密码@主机IP:端口号/服务名(或SID)
  • 默认端口:1521;
  • 服务名(11g 常用):helowin(Docker 镜像默认)、orcl(本地安装默认);
  • SID:Oracle 实例标识(11g 中 SID 通常与服务名一致)。

三、基础操作:用户与权限

1. 创建普通用户

需以管理员身份(SYSTEMSYS)登录,语法:

sql 复制代码
-- 创建用户(指定默认表空间 USERS,临时表空间 TEMP)
CREATE USER 用户名 IDENTIFIED BY 密码
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

-- 示例:创建用户 test,密码 123456
CREATE USER test IDENTIFIED BY 123456
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

2. 授予权限

Oracle 权限分两类:

  • 系统权限:数据库级操作(如创建表、连接数据库);
  • 对象权限 :操作其他用户的对象(如查询 SCOTT.EMP 表)。

常用授权命令:

sql 复制代码
-- 授予用户连接数据库、创建表的系统权限
GRANT CONNECT, RESOURCE TO test;

-- 授予用户查询 SCOTT.EMP 表的对象权限
GRANT SELECT ON scott.emp TO test;

-- 授予管理员权限(谨慎使用)
GRANT DBA TO test;

3. 切换用户与修改密码

sql 复制代码
-- 管理员切换到普通用户(无需退出 sqlplus)
CONNECT test/123456;

-- 修改当前用户密码
ALTER USER test IDENTIFIED BY new_password;

四、核心数据库对象

Oracle 中常用对象包括表、视图、索引、序列,以下是基础用法:

1. 表(Table):数据存储核心

创建表(DDL)
sql 复制代码
CREATE TABLE 表名 (
  列名1 数据类型 [约束],
  列名2 数据类型 [约束],
  ...
);

-- 示例:创建员工表 emp_test
CREATE TABLE emp_test (
  emp_id NUMBER(10) PRIMARY KEY,  -- 主键(唯一+非空)
  emp_name VARCHAR2(50) NOT NULL, -- 非空
  dept_id NUMBER(5),              -- 部门ID(外键关联部门表)
  salary NUMBER(10,2),            -- 工资(保留2位小数)
  hire_date DATE DEFAULT SYSDATE  -- 入职日期(默认当前日期)
);
常用数据类型
数据类型 说明
VARCHAR2(n) 可变长度字符串(n 最大 4000)
NUMBER(p,s) 数值型(p 总长度,s 小数位数)
DATE 日期时间型(包含年月日时分秒)
TIMESTAMP 高精度日期时间(包含毫秒)
CLOB 大文本(最大 4GB)
表操作(DDL)
sql 复制代码
-- 修改表:添加列
ALTER TABLE emp_test ADD email VARCHAR2(100);

-- 修改表:修改列类型(注意数据兼容性)
ALTER TABLE emp_test MODIFY email VARCHAR2(150);

-- 删除表(谨慎!不可逆)
DROP TABLE emp_test;

2. 数据操作(DML):增删改查

插入数据(INSERT)
sql 复制代码
-- 全列插入(顺序与表定义一致)
INSERT INTO emp_test VALUES (1, '张三', 10, 5000.00, SYSDATE, 'zhangsan@test.com');

-- 指定列插入(推荐,不受列顺序影响)
INSERT INTO emp_test (emp_id, emp_name, dept_id, salary) 
VALUES (2, '李四', 20, 6000.00);

-- 提交事务(Oracle 默认手动提交,插入后需 commit 生效)
COMMIT;
查询数据(SELECT)
sql 复制代码
-- 查询所有列
SELECT * FROM emp_test;

-- 查询指定列+条件+排序
SELECT emp_id, emp_name, salary 
FROM emp_test 
WHERE dept_id = 10 
ORDER BY salary DESC;

-- 聚合查询(统计部门10的平均工资)
SELECT AVG(salary) AS avg_salary 
FROM emp_test 
WHERE dept_id = 10;
更新数据(UPDATE)
sql 复制代码
UPDATE emp_test 
SET salary = 5500.00, email = 'zhangsan_new@test.com' 
WHERE emp_id = 1;

COMMIT; -- 提交修改
删除数据(DELETE)
sql 复制代码
-- 删除指定数据
DELETE FROM emp_test WHERE emp_id = 2;

-- 删除全表数据(保留表结构,可回滚)
DELETE FROM emp_test;

-- 快速删除全表(不写日志,不可回滚,效率高)
TRUNCATE TABLE emp_test;

COMMIT;

3. 视图(View):虚拟表

基于表的查询结果创建,简化复杂查询,隐藏数据细节:

sql 复制代码
-- 创建视图(查询部门10的员工信息)
CREATE VIEW dept10_emp AS
SELECT emp_id, emp_name, salary 
FROM emp_test 
WHERE dept_id = 10;

-- 查询视图(与查询表语法一致)
SELECT * FROM dept10_emp;

-- 删除视图
DROP VIEW dept10_emp;

4. 序列(Sequence):生成自增ID

Oracle 没有 AUTO_INCREMENT,需通过序列实现自增主键:

sql 复制代码
-- 创建序列(起始值1,步长1,无最大值)
CREATE SEQUENCE emp_seq
START WITH 1
INCREMENT BY 1
NOCYCLE; -- 不循环

-- 调用序列(NEXTVAL:下一个值,CURRVAL:当前值)
INSERT INTO emp_test (emp_id, emp_name) 
VALUES (emp_seq.NEXTVAL, '王五');

COMMIT;

-- 删除序列
DROP SEQUENCE emp_seq;

5. 索引(Index):提升查询效率

基于表的列创建,加速查询(插入/更新会变慢,需合理使用):

sql 复制代码
-- 创建普通索引(针对查询频繁的 dept_id 列)
CREATE INDEX idx_emp_dept ON emp_test(dept_id);

-- 删除索引
DROP INDEX idx_emp_dept;

五、Oracle 特有语法与注意事项

1. 事务控制

Oracle 事务默认手动提交,需通过以下命令控制:

  • COMMIT:提交事务(永久生效);
  • ROLLBACK:回滚事务(撤销未提交的操作);
  • SAVEPOINT:设置保存点(回滚到指定节点)。

示例:

sql 复制代码
INSERT INTO emp_test VALUES (3, '赵六', 30, 7000.00, SYSDATE, 'zhaoliu@test.com');
SAVEPOINT sp1; -- 设置保存点

UPDATE emp_test SET salary = 7500 WHERE emp_id = 3;
ROLLBACK TO sp1; -- 回滚到保存点(撤销更新,保留插入)

COMMIT; -- 最终提交插入操作

2. 日期函数

Oracle 日期处理功能强大,常用函数:

sql 复制代码
-- 当前日期时间
SELECT SYSDATE FROM DUAL; -- DATE 类型
SELECT SYSTIMESTAMP FROM DUAL; -- TIMESTAMP 类型

-- 日期格式化(TO_CHAR)
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS current_time FROM DUAL;

-- 日期字符串转日期(TO_DATE)
INSERT INTO emp_test (emp_id, emp_name, hire_date) 
VALUES (4, '孙七', TO_DATE('2024-01-15', 'YYYY-MM-DD'));

3. 伪表 DUAL

Oracle 中 SELECT 必须包含 FROMDUAL 是系统伪表(无实际数据),用于无表查询:

sql 复制代码
-- 计算 1+1
SELECT 1+1 AS result FROM DUAL;

-- 查询当前用户
SELECT USER FROM DUAL;

4. 注意事项

  • VARCHAR2VARCHAR:Oracle 中 VARCHARVARCHAR2 的同义词,推荐使用 VARCHAR2
  • 区分大小写:Oracle 关键字、表名、列名默认不区分大小写(会自动转大写),若需区分需用双引号括起(不推荐);
  • 空值处理:NULL 不等于任何值,判断空值需用 IS NULL/IS NOT NULL(不能用 =/!=);
  • 表空间:创建用户时需指定默认表空间,否则可能因权限不足无法创建表。

六、入门进阶方向

  1. PL/SQL 编程:存储过程、函数、触发器、游标(Oracle 核心编程能力);
  2. 权限与角色:细粒度权限控制、角色管理;
  3. 备份与恢复:RMAN 备份、数据泵(expdp/impdp)导入导出;
  4. 性能优化:SQL 执行计划、索引优化、表分区;
  5. Oracle 19c 新特性:PDB 可插拔数据库、JSON 支持增强等。
相关推荐
数据库小组1 小时前
2026 年,MySQL 到 SelectDB 同步为何更关注实时、可观测与可校验?
数据库·mysql·数据库管理工具·数据同步·ninedata·selectdb·迁移工具
华科易迅1 小时前
MybatisPlus增删改查操作
android·java·数据库
Kethy__2 小时前
计算机中级-数据库系统工程师-计算机体系结构与存储系统
大数据·数据库·数据库系统工程师·计算机中级
SHoM SSER2 小时前
MySQL 数据库连接池爆满问题排查与解决
android·数据库·mysql
熬夜的咕噜猫2 小时前
MySQL备份与恢复
数据库·oracle
jnrjian2 小时前
recover database using backup controlfile until cancel 假recover,真一致
数据库·oracle
lifewange3 小时前
java连接Mysql数据库
java·数据库·mysql
大妮哟3 小时前
postgresql数据库日志量异常原因排查
数据库·postgresql·oracle
还是做不到嘛\.4 小时前
Dvwa靶场-SQL Injection (Blind)-基于sqlmap
数据库·sql·web安全
不写八个4 小时前
PHP教程004:php链接mysql数据库
数据库·mysql·php