Oracle 基础入门:核心概念与实操指南(视频教程)
Oracle 基础入门:核心概念与实操指南
- Oracle 是全球领先的关系型数据库管理系统(RDBMS),以稳定性、安全性和高性能著称,广泛应用于企业级系统。本文从核心概念、环境准备、基础操作、常用对象、SQL 核心语法五个维度,帮你快速掌握 Oracle 基础。
- 视频教程:
https://pan.quark.cn/s/bcbe74d71b6d
一、核心概念梳理
1. 数据库与实例
- 数据库(Database):物理存储的集合(数据文件、控制文件、日志文件等),Oracle 中一个数据库可对应多个实例(RAC 集群场景)。
- 实例(Instance):数据库启动后,内存结构(SGA)+ 后台进程(DBWR、LGWR、CKPT 等)的总称,是“运行中的数据库”。
- 关系:实例是数据库的“访问入口”,单机环境下通常“一个实例对应一个数据库”。
2. 用户与模式(Schema)
- 用户(User):数据库的访问账号(如
SYS、SYSTEM、普通用户),需分配权限才能操作数据。 - 模式(Schema):用户拥有的数据库对象(表、视图、索引等)的集合,默认情况下,用户名将 = 模式名(如用户
SCOTT的模式就是SCOTT,其表EMP需通过SCOTT.EMP访问)。 - 内置用户:
SYS:超级管理员(需以SYSDBA身份登录),管理数据库核心组件;SYSTEM:普通管理员,管理用户、权限等日常运维。
3. 数据文件与表空间
- 表空间(Tablespace):逻辑存储单元,用于分类管理数据(如
SYSTEM系统表空间、USERS普通用户表空间)。 - 数据文件(Data File):物理存储文件,表空间由一个或多个数据文件组成(数据最终存在数据文件中)。
- 关系:数据库 → 表空间 → 数据文件 → 表/数据。
二、环境准备
1. 安装 Oracle
- 推荐版本:Oracle 11g(入门友好)、Oracle 19c(长期支持版)。
- 安装介质:官网下载安装包(需注册 Oracle 账号),或使用 Docker 快速部署(推荐新手):
# 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 自带),如: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. 创建普通用户
需以管理员身份(SYSTEM 或 SYS)登录,语法:
-- 创建用户(指定默认表空间 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表)。
常用授权命令:
-- 授予用户连接数据库、创建表的系统权限
GRANT CONNECT, RESOURCE TO test;-- 授予用户查询 SCOTT.EMP 表的对象权限
GRANT SELECT ON scott.emp TO test;-- 授予管理员权限(谨慎使用)
GRANT DBA TO test;
3. 切换用户与修改密码
-- 管理员切换到普通用户(无需退出 sqlplus)
CONNECT test/123456;-- 修改当前用户密码
ALTER USER test IDENTIFIED BY new_password;
四、核心数据库对象
Oracle 中常用对象包括表、视图、索引、序列,以下是基础用法:
1. 表(Table):数据存储核心
创建表(DDL)
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)
-- 修改表:添加列
ALTER TABLE emp_test ADD email VARCHAR2(100);-- 修改表:修改列类型(注意数据兼容性)
ALTER TABLE emp_test MODIFY email VARCHAR2(150);-- 删除表(谨慎!不可逆)
DROP TABLE emp_test;
2. 数据操作(DML):增删改查
插入数据(INSERT)
-- 全列插入(顺序与表定义一致)
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)
-- 查询所有列
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)
UPDATE emp_test
SET salary = 5500.00, email = 'zhangsan_new@test.com'
WHERE emp_id = 1;COMMIT; -- 提交修改
删除数据(DELETE)
-- 删除指定数据
DELETE FROM emp_test WHERE emp_id = 2;-- 删除全表数据(保留表结构,可回滚)
DELETE FROM emp_test;-- 快速删除全表(不写日志,不可回滚,效率高)
TRUNCATE TABLE emp_test;COMMIT;
3. 视图(View):虚拟表
基于表的查询结果创建,简化复杂查询,隐藏数据细节:
-- 创建视图(查询部门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,需通过序列实现自增主键:
-- 创建序列(起始值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):提升查询效率
基于表的列创建,加速查询(插入/更新会变慢,需合理使用):
-- 创建普通索引(针对查询频繁的 dept_id 列)
CREATE INDEX idx_emp_dept ON emp_test(dept_id);-- 删除索引
DROP INDEX idx_emp_dept;
五、Oracle 特有语法与注意事项
1. 事务控制
Oracle 事务默认手动提交,需通过以下命令控制:
COMMIT:提交事务(永久生效);ROLLBACK:回滚事务(撤销未提交的操作);SAVEPOINT:设置保存点(回滚到指定节点)。
示例:
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 日期处理功能强大,常用函数:
-- 当前日期时间
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 必须包含 FROM,DUAL 是系统伪表(无实际数据),用于无表查询:
-- 计算 1+1
SELECT 1+1 AS result FROM DUAL;-- 查询当前用户
SELECT USER FROM DUAL;
4. 注意事项
VARCHAR2与VARCHAR:Oracle 中VARCHAR是VARCHAR2的同义词,推荐使用VARCHAR2;- 区分大小写:Oracle 关键字、表名、列名默认不区分大小写(会自动转大写),若需区分需用双引号括起(不推荐);
- 空值处理:
NULL不等于任何值,判断空值需用IS NULL/IS NOT NULL(不能用=/!=); - 表空间:创建用户时需指定默认表空间,否则可能因权限不足无法创建表。
六、入门进阶方向
- PL/SQL 编程:存储过程、函数、触发器、游标(Oracle 核心编程能力);
- 权限与角色:细粒度权限控制、角色管理;
- 备份与恢复:RMAN 备份、数据泵(expdp/impdp)导入导出;
- 性能优化:SQL 执行计划、索引优化、表分区;
- Oracle 19c 新特性:PDB 可插拔数据库、JSON 支持增强等。
