Oracle 11g数据库常用对象创建与管理
Oracle 11g 的数据库对象是构建和运行数据库系统的核心单元,不同对象各司其职,相互配合实现数据的高效存储、管理与应用。以下从核心对象的定义、作用、特性以及操作示例等方面展开详细说明:
1. 表
表是 Oracle 数据库中最基础的对象,用于永久存储结构化数据,所有其他数据库对象(如视图、索引)大多依赖表而存在。
关键特性
1.结构化存储:由 “列(Column)” 和 “行(Row)” 组成,列定义数据的类型(如VARCHAR2(50)(字符串)、NUMBER(10)(数字)、DATE(日期))、长度及约束;行对应一条具体的数据记录。
2.约束保障完整性:通过约束(Constraint)确保数据准确性,常见约束包括:
3.主键(Primary Key):唯一标识表中每条记录,非空且唯一,如用户表的 “用户 ID”。
4.外键(Foreign Key):关联两个表,保证关联数据的一致性,如订单表的 “用户 ID” 关联用户表的 “用户 ID”。
5.非空(NOT NULL):限制列必须填写数据,如 “用户名” 列不可为空。
6.唯一(UNIQUE):限制列的值唯一,如 “手机号” 列不可重复。
创建表
-- 创建“用户表(USER_INFO)”
CREATE TABLE USER_INFO (
USER_ID NUMBER(10) PRIMARY KEY, -- 主键(用户ID)
USER_NAME VARCHAR2(50) NOT NULL, -- 用户名(非空)
PHONE VARCHAR2(20) UNIQUE, -- 手机号(唯一)
CREATE_TIME DATE DEFAULT SYSDATE -- 创建时间(默认取当前时间)
);
修改表结构
ALTER TABLE USER_INFO ADD EMAIL VARCHAR2(100);
2. 视图
视图是基于一个或多个表(或其他视图)的虚拟表,本身不存储实际数据,仅保存 SQL 查询语句,相当于数据访问的 “过滤镜” 和 “简化器”
关键特性
1.简化复杂查询:将多表关联、子查询等复杂逻辑封装成视图,用户无需记忆复杂 SQL,直接查询视图即可。
2.控制数据权限:通过视图隐藏表中的敏感字段(如用户表的 “密码” 列),仅开放必要信息给特定用户。
3.数据独立性:若底层表结构修改(如新增字段),只要视图关联的字段不变,依赖视图的应用无需调整。
创建视图
CREATE VIEW VIEW_USER_PUBLIC AS
SELECT USER_ID, USER_NAME, PHONE FROM USER_INFO;
3. 索引
索引是依附于表的辅助对象,通过构建 “字段值 - 数据位置” 的映射关系,让数据库快速定位目标数据,避免全表扫描(逐行查找数据),大幅提升查询效率。
关键特性
1.依赖表字段:需基于表的一个或多个字段创建,查询时若 SQL 的WHERE条件包含索引字段,数据库会自动使用索引。
2.类型多样:Oracle 11g 支持多种索引类型,常见的有:
普通索引(B-Tree Index):适用于等值查询(如WHERE USER_ID=100)和范围查询(如WHERE AGE BETWEEN 20 AND 30),是最常用的类型。
唯一索引(Unique Index):与 “唯一约束” 配合,确保索引字段值唯一,同时提升查询速度。
位图索引(Bitmap Index):适用于字段值重复率高的场景(如 “性别”“状态” 列),占用空间小,但不适合频繁修改的表。
创建普通索引
CREATE INDEX IDX_USER_NAME ON USER_INFO(USER_NAME);
删除索引
DROP INDEX IDX_USER_NAME;
4. 序列
序列是独立于表的数据库对象,用于生成连续且唯一的数字序列,主要作用是为表的主键(如 ID 列)自动赋值,避免手动输入导致的重复或空缺。
关键特性
1.独立性:不依赖任何表,可被多个表共用(如用同一个序列给 “用户表” 和 “订单表” 的主键赋值)。
2.可配置性:创建时可设置起始值(START WITH)、步长(INCREMENT BY)、最大值(MAXVALUE)等参数。
3.调用方式:通过NEXTVAL(获取下一个序列值)和CURRVAL(获取当前序列值)调用,首次使用需先执行NEXTVAL。
创建序列(为用户表主键生成自增 ID,起始值 1,步长 1,无最大值):
CREATE SEQUENCE SEQ_USER_ID
START WITH 1 -- 起始值
INCREMENT BY 1 -- 步长(每次+1)
NOCYCLE -- 达到最大值后不循环
NOCACHE; -- 不缓存序列值(避免数据库重启后序列值跳号)
使用序列(插入数据时,用序列给主键赋值):
INSERT INTO USER_INFO (USER_ID, USER_NAME, PHONE)
VALUES (SEQ_USER_ID.NEXTVAL, '张三', '13800138000');
5. 存储过程
存储过程是预先编写好并存储在数据库中的 SQL 代码块(可包含查询、插入、更新等操作),通过 “调用” 即可执行,主要用于封装复杂业务逻辑。
关键特性
1.封装性:将多步 SQL 操作(如 “创建订单” 需同时插入订单表、更新库存表、记录日志表)封装成一个存储过程,简化外部调用。
2.高效性:存储过程在数据库端执行,减少了应用程序与数据库之间的 SQL 语句传输(尤其适合复杂逻辑),提升执行效率。
3.可复用性:一次创建后,可被多个应用程序(如 Web 端、APP 端)重复调用,避免重复编写相同 SQL。
创建存储过程(封装 “新增用户” 逻辑,包含插入用户表和记录操作日志):
-- 创建存储过程:新增用户
CREATE OR REPLACE PROCEDURE PRO_ADD_USER(
p_user_name IN VARCHAR2, -- 输入参数:用户名
p_phone IN VARCHAR2, -- 输入参数:手机号
p_result OUT VARCHAR2 -- 输出参数:执行结果(成功/失败)
) AS
BEGIN
-- 插入用户数据
INSERT INTO USER_INFO (USER_ID, USER_NAME, PHONE)
VALUES (SEQ_USER_ID.NEXTVAL, p_user_name, p_phone);
-- 记录操作日志(假设存在日志表OPER_LOG)
INSERT INTO OPER_LOG (LOG_ID, OPER_TYPE, OPER_CONTENT, OPER_TIME)
VALUES (SEQ_LOG_ID.NEXTVAL, '新增用户', '添加用户:'||p_user_name, SYSDATE);
COMMIT; -- 提交事务
p_result := 'success'; -- 设置输出结果为“成功”
EXCEPTION
WHEN OTHERS THEN
ROLLBACK; -- 出错时回滚事务
p_result := 'fail: '||SQLERRM; -- 捕获错误信息并返回
END PRO_ADD_USER;
/
调用存储过程
DECLARE
v_result VARCHAR2(100); -- 定义变量接收输出结果
BEGIN
PRO_ADD_USER('李四', '13900139000', v_result); -- 调用存储过程
DBMS_OUTPUT.PUT_LINE(v_result); -- 输出执行结果
END;
/
6.总结感悟
通过对 Oracle 11g 中表、视图、索引、序列、存储过程这五大核心数据库对象的梳理,我们不难发现,这些对象并非孤立存在,而是相互协作、层层支撑的有机整体。这就要求我们不仅要掌握单个对象的特性与操作,更要学会从整体架构出发,让不同对象 “各司其职”,形成最优的协同效果。
当然,Oracle 11g 的数据库对象体系远不止于此,触发器、同义词、函数等对象同样在特定场景中发挥着重要作用。本次课堂总结只是入门的起点,我们后面要结合实际案例深入实践 —— 比如尝试用表、序列、存储过程搭建一个简单的用户管理系统,或通过索引优化复杂查询的执行效率,在实践中深化对这些知识的理解与运用,真正将理论转化为解决问题的能力。
更多推荐

所有评论(0)