[Oracle数据库] Oracle的表维护

发布于:2025-08-14 ⋅ 阅读:(18) ⋅ 点赞:(0)

目录

一、Oracle 数据类型:选对类型是基础

1️⃣字符型:存储文本数据

2️⃣数字型:存储数值数据

3️⃣日期型:存储时间数据

4️⃣二进制 / 大对象型:存储特殊数据

5️⃣行标识型:定位记录

二、创建表结构:搭建数据存储框架

1️⃣基本语法:创建表

2️⃣查看表结构:验证创建结果

3️⃣删除表:谨慎操作

4️⃣添加注释:让表更易理解

三、约束管理:给数据定 “规矩”

什么是约束?

1️⃣主键约束(PRIMARY KEY):唯一标识记录

2️⃣外键约束(FOREIGN KEY):关联两张表

3️⃣非空约束(NOT NULL):字段值不能为 NULL

4️⃣唯一约束(UNIQUE):字段值唯一但可空

5️⃣检查约束(CHECK):限定值的范围

四、修改表结构:灵活调整表定义

1️⃣删除约束

2️⃣添加新字段

3️⃣修改字段

4️⃣删除字段

5️⃣修改表名

总结:表维护的核心要点


对于 Oracle 数据库初学者来说,表是数据存储的核心载体,掌握表的创建、维护和约束管理是入门的关键。本文基于 Oracle 表维护的核心知识,从数据类型、表结构创建、约束管理到表结构修改,全方位梳理重点内容,帮你快速上手 Oracle 表操作。

一、Oracle 数据类型:选对类型是基础

数据类型决定了字段能存储的数据种类和范围,选对类型不仅能节省空间,还能避免数据错误。Oracle 的常用数据类型可分为几大类,其中部分类型已过时,初学者需重点掌握当前主流类型。

1️⃣字符型:存储文本数据

  • CHAR:固定长度字符串,最大长度 2000 字节。无论实际存储内容长短,都会占用指定长度的空间(例如CHAR(10)即使存 "abc",也占 10 字节)。
  • VARCHAR2:可变长度字符串,最大长度 4000 字节,可做索引的最大长度为 749 字节。仅占用实际内容 + 1 字节(用于记录长度),比 CHAR 更节省空间,是日常存储文本的首选。
  • NCHAR/NVARCHAR2与 CHAR/VARCHAR2 类似,但长度根据字符集(如 UTF-8)而定,适合存储多语言文本。
  • CLOB/NCLOB:用于存储超长字符数据(最大 4G),替代已过时的LONG类型(如存储文章、日志)。

2️⃣数字型:存储数值数据

  • NUMBER(P,S):最常用的数字类型,P表示总位数(整数 + 小数),S表示小数位数。例如NUMBER(5,2)可存 - 999.99 到 999.99 之间的数。
  • INTEGER:整数类型,等价于NUMBER(38,0),适合存储无需小数的数值(如年龄、数量)。
  • FLOAT/REAL:浮点数类型,FLOAT等价于NUMBER(38)(双精度),REAL等价于NUMBER(63)(更高精度),适合科学计算。

3️⃣日期型:存储时间数据

  • DATE:存储日期和时间,格式为DD-MM-YY(HH-MI-SS),精确到秒,且经过严格测试无 “千年虫” 问题。例如可存储 “23-10-23 14:30:00”(2023 年 10 月 23 日 14 点 30 分)。

4️⃣二进制 / 大对象型:存储特殊数据

  • BLOB:存储二进制数据(如图片、音频),最大 4G,替代已过时的RAWLONG RAW
  • BFILE:存储数据库外部的二进制文件(如本地图片),最大 4G,文件实际存放在操作系统中,数据库仅记录路径。

5️⃣行标识型:定位记录

  • ROWID:表中每条记录的唯一行号(10 字节),可快速定位记录(类似 “地址”),但不建议手动修改。
  • NROWID:二进制表的唯一行号,最大 4000 字节,用于特殊表结构。

注意:LONGRAWLONG RAW等类型已过时,Oracle 推荐用CLOBBLOB替代,避免后续版本不兼容。

二、创建表结构:搭建数据存储框架

创建表是存储数据的第一步,需明确表名、字段名和字段类型。以下是基础操作和相关技巧。

1️⃣基本语法:创建表

CREATE TABLE语句创建表,语法如下:

sql

CREATE TABLE 表名 (
  字段名1 数据类型(长度),
  字段名2 数据类型(长度),
  ...
);

示例:创建员工表EMP,包含员工编号(EMPNO)和姓名(ENAME):

sql

CREATE TABLE EMP (
  EMPNO NUMBER(4),  -- 员工编号,4位数字
  ENAME VARCHAR2(10)  -- 员工姓名,最长10个字符
);

2️⃣查看表结构:验证创建结果

创建后可用DESC命令查看表结构(字段名、类型等):

sql

DESC EMP;  -- 查看EMP表的字段信息

3️⃣删除表:谨慎操作

若表不再需要,用DROP TABLE删除(删除后数据无法恢复,需谨慎):

sql

DROP TABLE my_emp;  -- 删除名为my_emp的表

4️⃣添加注释:让表更易理解

为表和字段添加注释,方便后续维护(尤其多人协作时):

  • 给表加注释:

    sql

    COMMENT ON TABLE 表名 IS '表的说明';
    -- 示例:给student表加注释
    COMMENT ON TABLE student IS '学生信息表';
    
  • 给字段加注释:

    sql

    COMMENT ON COLUMN 表名.字段名 IS '字段的说明';
    -- 示例:给student表的hiredate字段加注释
    COMMENT ON COLUMN student.hiredate IS '入学时间';
    

查看注释:

  • 查看表注释:

    sql

    SELECT table_name, comments FROM user_tab_comments WHERE table_name = '表名';
    
  • 查看字段注释:

    sql

    SELECT table_name, column_name, comments FROM user_col_comments WHERE table_name = '表名';
    

三、约束管理:给数据定 “规矩”

约束是保证数据合法性的规则,Oracle 有 5 种常用约束,初学者需掌握其作用和创建方法。

什么是约束?

简单说,约束就是 “数据必须遵守的规矩”。例如 “学生表的学号不能重复”“年龄不能为负数”,这些规则都可通过约束实现。

1️⃣主键约束(PRIMARY KEY):唯一标识记录

主键是表中唯一标识每条记录的字段(或字段组合),特点:

  • 字段值唯一且不能为 NULL;
  • Oracle 会自动为其创建唯一索引,加速查询;
  • 一个表只能有一个主键。

创建方式:

  • 单字段主键(建表时定义):

    sql

    -- 系统自动命名主键
    CREATE TABLE bkeep1(empno NUMBER(5) PRIMARY KEY);
    
    -- 自定义主键名(推荐,方便管理)
    CREATE TABLE bkeep2(empno NUMBER(5) CONSTRAINT bkeep_pk PRIMARY KEY);
    
  • 联合主键(多字段组合唯一):

    sql

    -- empno和ename组合起来唯一标识记录
    CREATE TABLE bkeep3(
      empno NUMBER(5),
      ename VARCHAR2(10),
      CONSTRAINT bkeep_pk3 PRIMARY KEY(empno, ename)
    );
    
  • 建表后添加主键:

    sql

    CREATE TABLE bkeep4(empno NUMBER(5));  -- 先建表
    ALTER TABLE bkeep4 ADD PRIMARY KEY(empno);  -- 再添加主键
    

2️⃣外键约束(FOREIGN KEY):关联两张表

外键用于关联两个表,让 “从表” 的字段值必须来自 “主表” 的主键(或唯一键),例如 “订单表的用户 ID 必须存在于用户表中”。

<1>术语:

  • 主表:被参考的表(如用户表);
  • 从表:依赖主表的表(如订单表)。

<2.规则:

  • 从表外键字段与主表参考字段的数据类型必须一致;
  • 外键值可以为 NULL(表示 “暂未关联”);
  • 一个表可有多个外键(关联多个主表)。

<3>创建方式:

  • 建表时直接关联:

    sql

    -- bkeep5的sid字段参考student表的sid(主键)
    CREATE TABLE bkeep5(
      empno NUMBER(5),
      sid NUMBER(6) REFERENCES student(sid)
    );
    
  • 建表时单独定义外键:

    sql

    CREATE TABLE bkeep7(
      empno NUMBER(5),
      sid NUMBER(6),
      FOREIGN KEY(sid) REFERENCES student(sid)  -- 明确指定外键
    );
    
  • 建表后添加外键:

    sql

    CREATE TABLE bkeep6(empno NUMBER(5), sid NUMBER(6));  -- 先建表
    ALTER TABLE bkeep6 ADD FOREIGN KEY(sid) REFERENCES student(sid);  -- 再添加外键
    

主表对从表的控制:
当主表记录被修改或删除时,可通过以下规则控制从表:

  • ON DELETE CASCADE:主表记录删除,从表关联记录也删除(级联删除);
  • ON DELETE SET NULL:主表记录删除,从表外键值设为 NULL;
  • NO ACTION:若从表有关联记录,不允许删除主表记录(Oracle 默认)。

示例:级联删除

sql

-- 当student表的sid被删除时,bkeep5中关联的记录也会被删除
CREATE TABLE bkeep5(
  empno NUMBER(5),
  sid NUMBER(6) REFERENCES student(sid) ON DELETE CASCADE
);

3️⃣非空约束(NOT NULL):字段值不能为 NULL

非空约束强制字段必须有值,例如 “学生表的姓名不能空”。

创建方式:

  • 建表时定义:

    sql

    CREATE TABLE bkeep8(empno NUMBER(5) NOT NULL);  -- empno必须有值
    
  • 建表后添加(需确保已有数据中该字段无 NULL):

    sql

    ALTER TABLE bkeep10 MODIFY(sid NUMBER(5) NOT NULL);
    

4️⃣唯一约束(UNIQUE):字段值唯一但可空

唯一约束确保字段值不重复,但允许有多个 NULL(与主键的区别:主键不允许 NULL)。例如 “学生表的邮箱可空,但不为空时必须唯一”。

创建方式:

  • 建表时定义:

    sql

    CREATE TABLE bkeep12(
      empno NUMBER(5) UNIQUE,  -- empno唯一,可空
      sid NUMBER(6)
    );
    
  • 建表后添加:

    sql

    ALTER TABLE bkeep12 MODIFY(empno NUMBER(5) UNIQUE);
    

5️⃣检查约束(CHECK):限定值的范围

检查约束用于限制字段值的范围,例如 “年龄必须在 0-130 之间”“性别只能是‘男’或‘女’”。

创建方式:

  • 建表时定义:

    sql

    -- 年龄必须在20-99之间
    CREATE TABLE bkeep9(age NUMBER(4) CHECK(age > 20 AND age < 99));
    
  • 建表后添加:

    sql

    CREATE TABLE bkeep9(age NUMBER(3));  -- 先建表
    ALTER TABLE bkeep9 ADD CHECK(age >= 0 AND age <= 130);  -- 再限制年龄范围
    

四、修改表结构:灵活调整表定义

实际业务中,表结构可能需要调整(如添加字段、修改类型),Oracle 提供了丰富的修改命令,但需注意:尽量减少生产环境的表结构修改,避免影响业务。

1️⃣删除约束

  • 删除主键(若被从表引用,需加CASCADE删除关联外键):

    sql

    ALTER TABLE bkeep1 DROP PRIMARY KEY;  -- 无关联时
    ALTER TABLE bkeep1 DROP PRIMARY KEY CASCADE;  -- 有从表关联时
    
  • 按约束名删除(外键常用,需先知道约束名):

    sql

    ALTER TABLE bkeep1 DROP CONSTRAINT SYS_C0011074;  -- SYS_C0011074是约束名
    

2️⃣添加新字段

ADD命令添加字段:

sql

-- 给bkeep1表添加sname字段(可变长度字符串,最长2字节)
ALTER TABLE bkeep1 ADD(sname VARCHAR2(2));

3️⃣修改字段

  • 修改长度:

    sql

    -- 将sname的长度从2改为60
    ALTER TABLE bkeep1 MODIFY(sname VARCHAR2(60));
    
  • 修改类型(需确保字段无数据或数据兼容):

    sql

    -- 将sname从VARCHAR2改为CHAR
    ALTER TABLE bkeep1 MODIFY(sname CHAR(60));
    
  • 修改字段名:

    sql

    -- 将sname改名为studentname
    ALTER TABLE bkeep1 RENAME COLUMN sname TO studentname;
    

4️⃣删除字段

DROP COLUMN删除字段(删除后数据丢失,谨慎操作):

sql

ALTER TABLE bkeep1 DROP COLUMN bkeep11;  -- 删除bkeep11字段

5️⃣修改表名

RENAME命令修改表名:

sql

RENAME bkeep1 TO bkeepone;  -- 将bkeep1改名为bkeepone

总结:表维护的核心要点

Oracle 表维护是数据库操作的基础,初学者需重点掌握:

  1. 数据类型:优先使用VARCHAR2NUMBERDATECLOBBLOB等主流类型;
  2. 表创建:熟练使用CREATE TABLE,记得添加注释提高可读性;
  3. 约束管理:主键(唯一标识)、外键(关联表)、非空(必传值)是核心,根据业务需求合理设置;
  4. 表修改:谨慎操作,修改前备份数据,避免影响现有业务。

网站公告

今日签到

点亮在社区的每一天
去签到