news 2026/6/15 7:47:31

Oracle 19c入门学习教程,从入门到精通,Oracle 数据表对象 —— 语法知识点详解与案例实践(10)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Oracle 19c入门学习教程,从入门到精通,Oracle 数据表对象 —— 语法知识点详解与案例实践(10)

Oracle 数据表对象 —— 语法知识点详解与案例实践


一、环境准备:Oracle 安装与配置(简要指南)

说明:本章内容基于 Oracle Database。以下为在 Windows 或 Linux 上安装 Oracle Database 的基本步骤(以 Oracle 21c Express Edition 为例)。

1. 下载 Oracle Database

  • 访问官网:https://www.oracle.com/database/technologies/xe-downloads.html
  • 下载 Oracle Database 21c XE(免费版)

2. 安装步骤(Windows 示例)

  1. 以管理员身份运行安装程序OracleXE213_Win64.exe
  2. 设置数据库口令(如:oracle123
  3. 选择安装路径(默认即可)
  4. 安装完成后,服务会自动启动:
    • OracleServiceXE
    • OracleXETNSListener

3. 连接数据库

使用 SQL*Plus 或 SQL Developer 连接:

# 使用 sqlplus 命令行sqlplus sys/oracle123@localhost:1521/XE as sysdba

或创建普通用户(推荐):

-- 创建表空间(可选)CREATETABLESPACEusers_ts DATAFILE'users_ts.dbf'SIZE100M AUTOEXTENDON;-- 创建用户CREATEUSERhr IDENTIFIEDBYhr123DEFAULTTABLESPACEusers_ts;-- 授予权限GRANTCONNECT,RESOURCE,CREATEVIEWTOhr;

然后用hr/hr123登录进行练习。


二、数据表操作语法详解与案例


1. 数据表概述

  • 表是 Oracle 中存储数据的基本逻辑单元。
  • 每个表由行(记录)和列(字段)组成。
  • 表属于某个用户(Schema),如hr.employees

2. 创建数据表(CREATE TABLE)

语法:
CREATETABLE[schema.]table_name(column_name datatype[DEFAULTexpr][column_constraint],...[table_constraint])[TABLESPACEtablespace_name];
案例:创建员工表
-- 创建 employees 表CREATETABLEemployees(emp_id NUMBER(6)PRIMARYKEY,-- 主键约束first_name VARCHAR2(20),-- 可为空last_name VARCHAR2(25)NOTNULL,-- 非空约束email VARCHAR2(30)UNIQUE,-- 唯一性约束phone VARCHAR2(20),hire_dateDATEDEFAULTSYSDATE,-- 默认当前日期job_id VARCHAR2(10),salary NUMBER(8,2)CHECK(salary>0),-- 检查约束(隐式)manager_id NUMBER(6),dept_id NUMBER(4));

注释

  • VARCHAR2是 Oracle 推荐的变长字符串类型。
  • DEFAULT SYSDATE表示若未提供值,则自动填入系统当前日期。
  • CHECK约束确保工资大于 0。

3. 数据表的逻辑结构

  • 段(Segment):表在物理上对应一个数据段。
  • 区(Extent):由多个连续数据块组成。
  • 块(Block):最小 I/O 单元,默认 8KB。

可通过USER_SEGMENTS查看:

SELECTsegment_name,segment_type,bytes/1024/1024ASsize_mbFROMuser_segmentsWHEREsegment_name='EMPLOYEES';

4. 数据表的特性

  • 支持分区(Partitioning)
  • 支持压缩(Compression)
  • 支持并行处理
  • 可设置存储参数(如 PCTFREE, INITTRANS)

5. 维护数据表

(1) 增加字段(ADD COLUMN)
-- 添加奖金字段ALTERTABLEemployeesADD(bonus NUMBER(8,2));
(2) 删除字段(DROP COLUMN)
-- 删除 phone 字段ALTERTABLEemployeesDROPCOLUMNphone;

⚠️ 注意:删除字段不可逆,且可能影响性能(标记删除,后续清理)。

(3) 修改字段(MODIFY COLUMN)
-- 修改 salary 精度,并设默认值ALTERTABLEemployeesMODIFY(salary NUMBER(10,2)DEFAULT5000.00);-- 修改字段为非空ALTERTABLEemployeesMODIFY(first_name VARCHAR2(20)NOTNULL);
(4) 重命名表(RENAME)
-- 重命名表RENAMEemployeesTOemp_info;-- 或ALTERTABLEemp_infoRENAMETOemployees;
(5) 改变表空间和存储参数
-- 移动表到新表空间ALTERTABLEemployees MOVETABLESPACEusers_ts;-- 修改存储参数(需启用 row movement)ALTERTABLEemployees MOVE PCTFREE20INITTRANS4;
(6) 删除表(DROP TABLE)
-- 普通删除(可闪回)DROPTABLEemployees;-- 彻底删除(不可恢复)DROPTABLEemployeesPURGE;-- 闪回恢复(如果未 purge)FLASHBACKTABLEemployeesTOBEFOREDROP;
(7) 修改表状态
-- 设置为只读ALTERTABLEemployeesREADONLY;-- 恢复为读写ALTERTABLEemployeesREADWRITE;

6. 数据完整性与约束

约束用于保证数据的准确性与一致性。

(1) 非空约束(NOT NULL)
-- 创建时定义CREATETABLEtest_notnull(id NUMBER,name VARCHAR2(20)NOTNULL);-- 或通过修改添加(需先确保无空值)ALTERTABLEemployeesMODIFY(last_name VARCHAR2(25)NOTNULL);
(2) 主键约束(PRIMARY KEY)
-- 创建表时定义CREATETABLEdepartments(dept_id NUMBER(4)PRIMARYKEY,dept_name VARCHAR2(30)NOTNULL);-- 或单独添加ALTERTABLEemployeesADDCONSTRAINTemp_pkPRIMARYKEY(emp_id);
(3) 唯一性约束(UNIQUE)
ALTERTABLEemployeesADDCONSTRAINTemp_email_ukUNIQUE(email);
(4) 外键约束(FOREIGN KEY)
-- 先确保主表存在CREATETABLEdepartments(dept_id NUMBER(4)PRIMARYKEY,dept_name VARCHAR2(30));-- 在 employees 中添加外键ALTERTABLEemployeesADDCONSTRAINTemp_dept_fkFOREIGNKEY(dept_id)REFERENCESdepartments(dept_id)ONDELETESETNULL;-- 或 CASCADE / NO ACTION(默认)

外键选项说明

  • ON DELETE CASCADE:主表删除,从表级联删除。
  • ON DELETE SET NULL:主表删除,从表字段设为 NULL(要求字段可为空)。
(5) 禁用和激活约束
-- 禁用外键约束(常用于大批量导入)ALTERTABLEemployeesDISABLECONSTRAINTemp_dept_fk;-- 激活约束(会验证现有数据)ALTERTABLEemployeesENABLECONSTRAINTemp_dept_fk;-- 启用但不验证已有数据(需谨慎)ALTERTABLEemployeesENABLENOVALIDATECONSTRAINTemp_dept_fk;
(6) 删除约束
-- 删除约束(保留列)ALTERTABLEemployeesDROPCONSTRAINTemp_email_uk;-- 删除主键(同时删除唯一索引)ALTERTABLEemployeesDROPPRIMARYKEY;

三、综合性案例

案例目标:

  1. 创建部门表和员工表,建立主外键关系。
  2. 插入测试数据。
  3. 修改表结构:增加字段、修改约束。
  4. 演示约束禁用与启用。
  5. 删除表并恢复(闪回)。

步骤 1:创建表结构

-- 创建部门表CREATETABLEdepartments(dept_id NUMBER(4)PRIMARYKEY,dept_name VARCHAR2(30)NOTNULL,location VARCHAR2(50));-- 创建员工表(暂不加外键)CREATETABLEemployees(emp_id NUMBER(6),first_name VARCHAR2(20),last_name VARCHAR2(25)NOTNULL,email VARCHAR2(30),hire_dateDATEDEFAULTSYSDATE,salary NUMBER(8,2)CHECK(salary>0),dept_id NUMBER(4));-- 添加主键ALTERTABLEemployeesADDCONSTRAINTemp_pkPRIMARYKEY(emp_id);-- 添加唯一约束ALTERTABLEemployeesADDCONSTRAINTemp_email_ukUNIQUE(email);-- 添加外键(引用 departments)ALTERTABLEemployeesADDCONSTRAINTemp_dept_fkFOREIGNKEY(dept_id)REFERENCESdepartments(dept_id)ONDELETESETNULL;

步骤 2:插入测试数据

-- 插入部门INSERTINTOdepartmentsVALUES(10,'HR','Beijing');INSERTINTOdepartmentsVALUES(20,'IT','Shanghai');-- 插入员工INSERTINTOemployees(emp_id,first_name,last_name,email,salary,dept_id)VALUES(101,'Alice','Smith','alice@example.com',8000,10);INSERTINTOemployees(emp_id,first_name,last_name,email,salary,dept_id)VALUES(102,'Bob','Lee','bob@example.com',9000,20);

步骤 3:修改表结构

-- 增加字段ALTERTABLEemployeesADD(commission_pct NUMBER(2,2));-- 修改字段默认值ALTERTABLEemployeesMODIFY(commission_pctDEFAULT0.1);-- 尝试插入违反外键的数据(会失败)-- INSERT INTO employees VALUES (103, 'Tom', 'King', 'tom@example.com', SYSDATE, 7000, 99); -- 错误!dept_id=99 不存在

步骤 4:禁用约束并批量导入

-- 禁用外键(假设要导入历史数据)ALTERTABLEemployeesDISABLECONSTRAINTemp_dept_fk;-- 插入无效 dept_id(临时允许)INSERTINTOemployees(emp_id,first_name,last_name,email,salary,dept_id)VALUES(103,'Charlie','Brown','charlie@example.com',6000,99);-- 修复数据或删除无效行DELETEFROMemployeesWHEREdept_id=99;-- 重新启用约束ALTERTABLEemployeesENABLECONSTRAINTemp_dept_fk;

步骤 5:删除与闪回

-- 删除表(放入回收站)DROPTABLEemployees;-- 查看回收站SHOWRECYCLEBIN;-- 闪回恢复FLASHBACKTABLEemployeesTOBEFOREDROP;-- 重命名恢复后的表(如果名字冲突)FLASHBACKTABLE"BIN$...$"TOBEFOREDROPRENAMETOemployees_old;

四、总结

操作类型关键语法
创建表CREATE TABLE ...
增加字段ALTER TABLE ... ADD (...)
修改字段ALTER TABLE ... MODIFY (...)
删除字段ALTER TABLE ... DROP COLUMN ...
重命名表RENAME old TO new
添加主键ADD CONSTRAINT pk PRIMARY KEY (...)
添加外键ADD CONSTRAINT fk FOREIGN KEY (...) REFERENCES ...
禁用约束ALTER TABLE ... DISABLE CONSTRAINT ...
删除表DROP TABLE ... [PURGE]
闪回表FLASHBACK TABLE ... TO BEFORE DROP

最佳实践建议

  • 所有约束命名(如emp_pk),便于管理。
  • 生产环境避免频繁DROP COLUMN
  • 大批量数据操作前,考虑禁用约束并事后验证。
  • 使用PURGE谨慎,避免无法恢复。

如有进一步需求(如分区表、物化视图、索引组织表等高级特性),可继续扩展本章内容。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 13:37:07

9个最佳性能测试工具(2026)

1、前言 性能测试检查软件程序在预期工作负载下的速度、响应时间、可靠性、资源使用情况和可扩展性。性能测试的目的不是发现功能缺陷,而是消除软件或设备中的性能瓶颈。 性能测试为利益相关者提供有关其应用程序的速度、稳定性和可扩展性的信息。更重要的是&…

作者头像 李华
网站建设 2026/6/15 12:23:13

基于springboot的植物花卉销售管理系统

博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言&#xff0…

作者头像 李华
网站建设 2026/6/15 13:12:22

看似平平无奇的00后,居然一跃上岸字节,表示真的卷不过......

又到了一年一度的求职旺季金!三!银!四!在找工作的时候都必须要经历面试这个环节。在这里我想分享一下自己上岸字节的面试经验,过程还挺曲折的,但是还好成功上岸了。大家可以参考一下! 0821测评 …

作者头像 李华
网站建设 2026/6/7 2:08:03

CAS入门

一、先搞懂:为什么需要CAS? 在讲CAS之前,我们先解决一个基础问题:并发场景下,简单的自增操作(比如i)为什么会出问题? 举个例子:你有一个变量int count 0,让1…

作者头像 李华
网站建设 2026/6/15 13:14:44

Dify:一站式AI应用开发平台全解析与Windows部署指南

从零到一,掌握这款让AI应用开发效率提升10倍的开源神器 🎯 什么是Dify? Dify(发音为 /ˈdɪfaɪ/)是一个开源的生成式AI应用开发平台,旨在帮助开发者和企业快速构建并部署生产级的AI应用。它的核心是融合了…

作者头像 李华
网站建设 2026/6/3 3:00:36

怎样用Postman做接口自动化测试及完美的可视化报告

postman官网下载地址: https://www.postman.com/downloads/ 下载后直接双击文件安装: Postman-win64-9.20.3-Setup.exe 根据自己需要修改软件安装路径,后面直接默认安装就可以 1、Jenkins简介 Jenkins是一个开源的软件项目,…

作者头像 李华