Oracle 11g数据库常用对象创建与管理方法详解

 更新时间:2025年11月05日 11:33:20   作者:没有鱼myy  
这篇文章主要介绍了Oracle 11g数据库常用对象创建与管理的相关资料,Oracle 11g数据库是企业级关系型数据库管理系统,它提供了强大的数据管理功能,文中通过代码介绍的非常详细,需要的朋友可以参考下

引言

在Oracle数据库的浩瀚世界里,数据本身固然重要,但如何高效地组织、访问和管理这些数据,才是发挥其强大威力的关键。这一切都离不开数据库对象。无论是初入行的DBA还是后端开发人员,熟练掌握Oracle常用对象的创建与管理都是一项核心技能。

本文将带您系统地了解Oracle 11g中几种最常用的数据库对象,包括表、视图、序列、索引和同义词。我们将通过清晰的语法示例和实用的管理技巧,助您夯实基础,提升数据库操作能力。

一、表(Table):数据的基石

表是数据库中存储数据的基本单位,由行和列组成。设计良好的表结构是高效数据库系统的前提。

1. 创建表

使用 CREATE TABLE 语句,你需要定义列名、数据类型和约束。

CREATE TABLE employees (
    employee_id    NUMBER(6)     PRIMARY KEY,
    first_name     VARCHAR2(20),
    last_name      VARCHAR2(25)  NOT NULL,
    email          VARCHAR2(25)  NOT NULL UNIQUE,
    hire_date      DATE          DEFAULT SYSDATE NOT NULL,
    salary         NUMBER(8,2),
    department_id  NUMBER(4),
    -- 定义外键约束,关联到部门表
    CONSTRAINT fk_dept_id
        FOREIGN KEY (department_id)
        REFERENCES departments(department_id)
);

关键点:

  • 数据类型: NUMBERVARCHAR2DATECLOBBLOB 等。

  • 约束: PRIMARY KEYFOREIGN KEYNOT NULLUNIQUECHECK。约束保证了数据的完整性和一致性。

2. 管理表

  • 修改表(ALTER TABLE): 用于添加、修改或删除列,以及添加或删除约束。

-- 添加新列
ALTER TABLE employees ADD (phone_number VARCHAR2(15));

-- 修改列数据类型
ALTER TABLE employees MODIFY (salary NUMBER(9,2));

-- 删除列
ALTER TABLE employees DROP COLUMN phone_number;

-- 添加约束
ALTER TABLE employees ADD CONSTRAINT chk_salary CHECK (salary > 0);
  •  删除表(DROP TABLE):
DROP TABLE employees;
-- 谨慎使用!会删除表结构和所有数据。

DROP TABLE employees CASCADE CONSTRAINTS;
-- 同时删除与之相关的引用完整性约束
  • 重命名表(RENAME):
RENAME employees TO emp_backup;
  • 截断表(TRUNCATE TABLE): 快速删除表中所有数据,不可回滚,并释放表空间。
TRUNCATE TABLE emp_backup;

二、视图(View):虚拟的逻辑窗口

视图是基于一个或多个表的查询结果集。它本身不存储数据,像一个预定义的查询窗口,简化了复杂查询,增强了数据安全性。

1. 创建视图

CREATE OR REPLACE VIEW vw_emp_dept AS
SELECT e.employee_id,
       e.first_name || ' ' || e.last_name AS full_name,
       e.salary,
       d.department_name
FROM   employees e
JOIN   departments d ON e.department_id = d.department_id
WHERE  e.salary > 10000;

2. 管理视图

  • 查询视图: 像查询普通表一样。

SELECT * FROM vw_emp_dept;
  • 删除视图:
DROP VIEW vw_emp_dept;

优点:

  • 简化操作: 将复杂的多表查询封装成一个简单的视图。

  • 安全性: 可以只暴露视图中的特定列给用户,隐藏敏感数据。

  • 逻辑独立性: 即使底层表结构发生变化,只需修改视图定义,而不影响应用程序。

三、序列(Sequence):自动编号发生器

序列是一个数据库对象,用于生成唯一的、连续的整数编号,通常为主键字段提供值。

1. 创建序列

CREATE SEQUENCE seq_emp_id
  INCREMENT BY 1    -- 每次增加1
  START WITH 1000   -- 从1000开始
  NOMAXVALUE        -- 无最大值(或 MAXVALUE 9999)
  NOCYCLE           -- 不循环
  CACHE 20;         -- 缓存20个序列值以提高性能

2. 使用序列

  • NEXTVAL: 获取序列的下一个值。

  • CURRVAL: 获取序列的当前值(必须先使用 NEXTVAL)。

INSERT INTO employees (employee_id, first_name, last_name, email)
VALUES (seq_emp_id.NEXTVAL, '张', '三', 'zhangsan@example.com');

SELECT seq_emp_id.CURRVAL FROM dual;

3. 管理序列

-- 修改序列(不能修改START WITH,通常用于修改增量、缓存值等)
ALTER SEQUENCE seq_emp_id INCREMENT BY 2;

-- 删除序列
DROP SEQUENCE seq_emp_id;

四、索引(Index):加速查询的引擎

索引是一种提高数据检索速度的数据库结构,类似于书的目录。

1. 创建索引

  • 单列索引:

CREATE INDEX idx_emp_last_name ON employees(last_name);
  • 复合索引:
CREATE INDEX idx_emp_dept_salary ON employees(department_id, salary DESC);
  • 唯一索引:(通常由UNIQUE或PRIMARY KEY约束自动创建,也可手动)
CREATE UNIQUE INDEX idx_emp_email ON employees(email);

2. 管理索引

-- 重建索引(优化索引性能)
ALTER INDEX idx_emp_last_name REBUILD;

-- 删除索引
DROP INDEX idx_emp_last_name;

索引使用场景:

  • 经常出现在 WHEREJOINORDER BY 子句中的列。

  • 表的数据量很大。

注意事项:

  • 索引会占用存储空间。

  • 会降低 INSERTUPDATEDELETE 数据的速度,因为索引也需要维护。

五,作业

1.Views表:

Column NameType
article_idint
author_idint
viewer_id int
view_datedata

此表可能会存在重复行。(换句话说,在 SQL 中这个表没有主键)

此表的每一行都表示某人在某天浏览了某位作者的某篇文章。

请注意,同一人的 author_id 和 viewer_id 是相同的。

请查询出所有浏览过自己文章的作者。

结果按照作者的 id 升序排列。

查询结果的格式如下所示:

输入:

-- 创建 Views 表
CREATE TABLE Views (
    article_id INT,
    author_id INT,
    viewer_id INT,
    view_date DATE
);

-- 插入示例数据
INSERT INTO Views (article_id, author_id, viewer_id, view_date) VALUES (1, 3, 5, DATE '2019-08-01');
INSERT INTO Views (article_id, author_id, viewer_id, view_date) VALUES (1, 3, 6, DATE '2019-08-02');
INSERT INTO Views (article_id, author_id, viewer_id, view_date) VALUES (2, 7, 7, DATE '2019-08-01');
INSERT INTO Views (article_id, author_id, viewer_id, view_date) VALUES (2, 7, 6, DATE '2019-08-02');
INSERT INTO Views (article_id, author_id, viewer_id, view_date) VALUES (4, 7, 1, DATE '2019-07-22');
INSERT INTO Views (article_id, author_id, viewer_id, view_date) VALUES (3, 4, 4, DATE '2019-07-21');
INSERT INTO Views (article_id, author_id, viewer_id, view_date) VALUES (3, 4, 4, DATE '2019-07-21');

-- 查询验证
SELECT * FROM Views;

输入结果:

输出:

SELECT DISTINCT author_id AS id
FROM Views
WHERE author_id = viewer_id
ORDER BY author_id;

输出结果:

2、表:Tweets

Column Name Type
tweet_idint
content varchar

在 SQL 中,tweet_id 是这个表的主键。

content 只包含字母数字字符,'!',' ',不包含其它特殊字符。

这个表包含某社交媒体 App 中所有的推文。

查询所有无效推文的编号(ID)。当推文内容中的字符数严格大于 15 时,该推文是无效的。

以任意顺序返回结果表。

查询结果格式如下所示:

输入:

-- 创建 Tweets 表
CREATE TABLE Tweets (
    tweet_id INT PRIMARY KEY,
    content VARCHAR2(4000)
);

-- 插入示例数据
INSERT INTO Tweets (tweet_id, content) VALUES (1, 'Vote for Biden');
INSERT INTO Tweets (tweet_id, content) VALUES (2, 'Let us make America great again!');

-- 查询验证
SELECT * FROM Tweets;

输入结果:

输出:

SELECT tweet_id
FROM Tweets
WHERE LENGTH(content) > 15;

输出结果:

3、表:Visits

Column NameType
visit_idint
 customer_idint

visit_id 是该表中具有唯一值的列。

该表包含有关光临过购物中心的顾客的信息

Column NameType
transaction_idint
visit_id      int
amountint

transaction_id 是该表中具有唯一值的列。

此表包含 visit_id 期间进行的交易的信息。

有一些顾客可能光顾了购物中心但没有进行交易。请你编写一个解决方案,来查找这些顾客的 ID ,以及他们只光顾不交易的次数。

返回以 任何顺序 排序的结果表。

返回结果格式如下例所示。

输入:

-- 创建 Visits 表
CREATE TABLE Visits (
    visit_id INT PRIMARY KEY,
    customer_id INT
);

-- 创建 Transactions 表
CREATE TABLE Transactions (
    transaction_id INT PRIMARY KEY,
    visit_id INT,
    amount INT
);

-- 插入 Visits 示例数据
INSERT INTO Visits (visit_id, customer_id) VALUES (1, 23);
INSERT INTO Visits (visit_id, customer_id) VALUES (2, 9);
INSERT INTO Visits (visit_id, customer_id) VALUES (4, 30);
INSERT INTO Visits (visit_id, customer_id) VALUES (5, 54);
INSERT INTO Visits (visit_id, customer_id) VALUES (6, 96);
INSERT INTO Visits (visit_id, customer_id) VALUES (7, 54);
INSERT INTO Visits (visit_id, customer_id) VALUES (8, 54);

-- 插入 Transactions 示例数据
INSERT INTO Transactions (transaction_id, visit_id, amount) VALUES (2, 5, 310);
INSERT INTO Transactions (transaction_id, visit_id, amount) VALUES (3, 5, 300);
INSERT INTO Transactions (transaction_id, visit_id, amount) VALUES (9, 5, 200);
INSERT INTO Transactions (transaction_id, visit_id, amount) VALUES (12, 1, 910);
INSERT INTO Transactions (transaction_id, visit_id, amount) VALUES (13, 2, 970);

-- 查询验证
SELECT * FROM Visits;
SELECT * FROM Transactions;

输入结果:

输出:

SELECT v.customer_id, COUNT(*) AS count_no_trans
FROM Visits v
LEFT JOIN Transactions t ON v.visit_id = t.visit_id
WHERE t.transaction_id IS NULL
GROUP BY v.customer_id
ORDER BY count_no_trans DESC, v.customer_id;

输出结果:

总结   

到此这篇关于Oracle 11g数据库常用对象创建与管理方法详解的文章就介绍到这了,更多相关Oracle 11g对象创建与管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle查看SQL执行计划的常见方法总结

    Oracle查看SQL执行计划的常见方法总结

    在日常的运维工作中,SQL优化是DBA的进阶技能,SQL优化的前提是要看SQL的执行计划是否正确,这篇文章主要介绍了Oracle查看SQL执行计划的常见方法,需要的朋友可以参考下
    2025-08-08
  • Oracle中nvl()和nvl2()函数实例详解

    Oracle中nvl()和nvl2()函数实例详解

    NVL函数的功能是实现空值的转换,根据第一个表达式的值是否为空值来返回响应的列名或表达式,下面这篇文章主要给大家介绍了关于Oracle中nvl()和nvl2()函数的相关资料,需要的朋友可以参考下
    2022-05-05
  • PLsql Oracle 下载安装图文过程详解

    PLsql Oracle 下载安装图文过程详解

    PL/SQLDeveloper是一款用于开发Oracle数据库的集成开发环境,可以通过官网下载安装配置,并通过配置tnsnames.ora文件及环境变量来连接Oracle数据库,当试用期到期时,可以通过修改注册表来重置试用期,对PLsql Oracle 下载安装相关操作感兴趣的朋友一起看看吧
    2025-02-02
  • Oracle数据库中创建自增主键的实例教程

    Oracle数据库中创建自增主键的实例教程

    Oracle的字段自增功能,可以利用创建触发器的方式来实现,接下来我们就来看看Oracle数据库中创建自增主键的实例教程,需要的朋友可以参考下
    2016-05-05
  • Oracle通过RMAN备份至MinIO且防止数据删除的详细步骤

    Oracle通过RMAN备份至MinIO且防止数据删除的详细步骤

    本文提供了一个简单的测试方案,用于将Oracle数据库通过RMAN备份到MinIO,并重点配置MinIO以防止备份文件被误删除,方案涵盖了环境准备、MinIO和RMAN的配置、防误删功能测试以及恢复验证等步骤,需要的朋友可以参考下
    2026-03-03
  • Oracle创建自增字段--ORACLE SEQUENCE的简单使用介绍

    Oracle创建自增字段--ORACLE SEQUENCE的简单使用介绍

    在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方接下来为大家介绍下Oracle创建自增字段方法感兴趣的各位可不要错过了哈
    2013-03-03
  • Oracle查询表占用空间的三种方法

    Oracle查询表占用空间的三种方法

    在Oracle数据库管理中,了解特定表或索引所占用的空间对于性能调优、存储规划以及资源分配至关重要,本文档介绍了三种常用的方法来查询Oracle数据库中表占用的空间,感兴趣的小伙伴跟着小编一起来看看吧
    2024-12-12
  • Oracle 查找与删除表中重复记录的步骤方法

    Oracle 查找与删除表中重复记录的步骤方法

    案例:一个应用表中的一个字段是主键,向表中插入数据时,先把数据放在临时表中(没有主键)然后再插入应用表。
    2013-04-04
  • Oracle 存储过程加密方法

    Oracle 存储过程加密方法

    Oracle 存储过程加密方法,需要的朋友可以参考下。
    2009-10-10
  • oracle创建用户过程详解

    oracle创建用户过程详解

    这篇文章主要介绍了oracle创建用户过程详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08

最新评论