news 2026/4/16 12:28:24

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/3/19 3:51:03

从零构建云原生“试验田”:超融合的自我修养

对于多数企业而言,云原生转型从不是“一步到位”的豪赌,而是通过搭建轻量化“试验田”逐步验证、迭代的过程。这个试验田既要低成本、易部署,又要能模拟真实生产环境的复杂负载,还要为后续规模化扩展预留空间。超融合凭借“计算、…

作者头像 李华
网站建设 2026/4/16 12:25:44

aiSim领衔!国内外自动驾驶仿真软件大全:热门推荐与选择指南

在自动驾驶技术飞速发展的今天,仿真测试已成为自动驾驶算法研发、验证的核心环节,能够大幅降低路测成本、突破场景复现限制,据行业数据显示,约90%的自动驾驶算法测试通过仿真平台完成。目前市面上涌现出多款功能各异的自动驾驶仿真…

作者头像 李华
网站建设 2026/4/11 18:41:29

xactengine2_2.dll文件丢失找不到怎么办?免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/14 20:05:04

Java基于SSM+JSP的经典诗文爱好者学习交流平台

项目说明 在信息爆炸的时代,互联网技术的迅猛发展,为各类文化交流与传承提供了新的可能。经典诗文作为中华文化的瑰宝,其传承与发扬显得尤为重要。因此,构建一个专为经典诗文爱好者设计的学习交流平台,不仅是技术的革新…

作者头像 李华
网站建设 2026/4/4 14:42:04

论文引用工具Top6:2025自动规范生成指南

核心工具对比速览 工具名称 核心优势 适用场景 处理速度 AiBiye 智能识别引用格式,自动匹配规范 学术论文初稿 3-5秒/页 AiCheck 深度检测引用缺失,精准定位问题 论文终稿检查 10秒/篇 AskPaper 多语言引用规范支持 国际期刊投稿 5-8秒/页…

作者头像 李华