Oracle 查看表结构的方法(MySQL vs Oracle 查看表结构对比)

Oracle提供了多种查看表结构的方法:

  1. 使用DESCRIBE命令快速查看列名和类型;

  2. 查询USER_TAB_COLUMNS获取详细列信息;

  3. 通过USER_COL_COMMENTS查看列注释;

  4. 使用USER_CONSTRAINTS查询约束信息;

  5. 调用DBMS_METADATA.GET_DDL获取完整建表语句。


相比MySQL的DESC命令,Oracle的数据字典视图提供了更全面的表结构信息,包括列属性、约束、注释等。


开发人员可根据需求选择不同方法,从简单查看列名到获取完整DDL语句。


Oracle 查看表结构的方法

Oracle 没有像 MySQL 的 DESCSHOW COLUMNS 那样简单的命令,但有多种方式可以查看表结构。


方法一:使用 DESCRIBE(最常用)

sql

sql 复制代码
DESC actor;
-- 或
DESCRIBE actor;

输出示例:

text

复制代码
Name         Null? Type
------------ ----- -------------
ACTOR_ID     NOT NULL NUMBER(5)
FIRST_NAME   NOT NULL VARCHAR2(45)
LAST_NAME    NOT NULL VARCHAR2(45)
LAST_UPDATE  NOT NULL DATE
CREATE_DATE  NOT NULL DATE

方法二:查询数据字典视图(最详细)

2.1 查看列信息

sql

sql 复制代码
-- 查看指定表的所有列
SELECT 
    COLUMN_NAME,
    DATA_TYPE,
    DATA_LENGTH,
    NULLABLE,
    DATA_DEFAULT
FROM USER_TAB_COLUMNS 
WHERE TABLE_NAME = 'ACTOR'
ORDER BY COLUMN_ID;

2.2 查看详细列信息(含注释)

sql

sql 复制代码
SELECT 
    a.COLUMN_NAME,
    a.DATA_TYPE,
    a.DATA_LENGTH,
    a.NULLABLE,
    b.COMMENTS
FROM USER_TAB_COLUMNS a
LEFT JOIN USER_COL_COMMENTS b 
    ON a.TABLE_NAME = b.TABLE_NAME 
    AND a.COLUMN_NAME = b.COLUMN_NAME
WHERE a.TABLE_NAME = 'ACTOR'
ORDER BY a.COLUMN_ID;

三、数据字典视图对比

视图 作用 说明
USER_TAB_COLUMNS 当前用户拥有的表列信息 最常用
ALL_TAB_COLUMNS 当前用户可访问的所有表列 权限范围更广
DBA_TAB_COLUMNS 数据库所有表的列 需要 DBA 权限
USER_COL_COMMENTS 当前用户表的列注释 查看 COMMENT
USER_CONSTRAINTS 当前用户表的约束信息 查看主键、外键等
USER_IND_COLUMNS 当前用户表的索引列 查看索引信息

四、综合查询示例

查看表完整结构(列+约束+注释)

sql

sql 复制代码
-- 列信息 + 注释
SELECT 
    t.COLUMN_ID,
    t.COLUMN_NAME,
    t.DATA_TYPE,
    t.DATA_LENGTH AS "LENGTH",
    t.NULLABLE,
    c.COMMENTS
FROM USER_TAB_COLUMNS t
LEFT JOIN USER_COL_COMMENTS c 
    ON t.TABLE_NAME = c.TABLE_NAME AND t.COLUMN_NAME = c.COLUMN_NAME
WHERE t.TABLE_NAME = UPPER('actor')
ORDER BY t.COLUMN_ID;

查看主键信息

sql

sql 复制代码
SELECT 
    a.COLUMN_NAME,
    a.CONSTRAINT_NAME
FROM USER_CONS_COLUMNS a
JOIN USER_CONSTRAINTS b 
    ON a.CONSTRAINT_NAME = b.CONSTRAINT_NAME
WHERE b.TABLE_NAME = 'ACTOR' 
    AND b.CONSTRAINT_TYPE = 'P';

五、MySQL vs Oracle 查看表结构对比

操作 MySQL Oracle
简单查看 DESC actor; DESC actor;
查看列详情 SHOW COLUMNS FROM actor; SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME='ACTOR';
查看建表语句 SHOW CREATE TABLE actor; SELECT DBMS_METADATA.GET_DDL('TABLE','ACTOR') FROM DUAL;
查看注释 SHOW FULL COLUMNS FROM actor; SELECT * FROM USER_COL_COMMENTS;
查看索引 SHOW INDEX FROM actor; SELECT * FROM USER_IND_COLUMNS;
查看约束 SHOW CREATE TABLE SELECT * FROM USER_CONSTRAINTS;

六、获取建表语句(DDL)

sql

sql 复制代码
-- Oracle 特有方式
SELECT DBMS_METADATA.GET_DDL('TABLE', 'ACTOR') FROM DUAL;

-- 如果表属于其他用户(如 SCOTT)
SELECT DBMS_METADATA.GET_DDL('TABLE', 'ACTOR', 'SCOTT') FROM DUAL;

输出示例:

text

复制代码
CREATE TABLE "SCOTT"."ACTOR" (
   "ACTOR_ID"    NUMBER(5) NOT NULL ENABLE,
   "FIRST_NAME"  VARCHAR2(45) NOT NULL ENABLE,
   "LAST_NAME"   VARCHAR2(45) NOT NULL ENABLE,
   "LAST_UPDATE" DATE NOT NULL ENABLE,
   "CREATE_DATE" DATE DEFAULT TO_DATE('2020-10-01','YYYY-MM-DD') NOT NULL ENABLE,
   PRIMARY KEY ("ACTOR_ID") ENABLE
)

七、常用快捷命令总结

命令/查询 用途
DESC 表名 快速查看列名和类型
SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME='表名'; 查看列详细信息
SELECT * FROM USER_COL_COMMENTS WHERE TABLE_NAME='表名'; 查看列注释
SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME='表名'; 查看约束
SELECT DBMS_METADATA.GET_DDL('TABLE','表名') FROM DUAL; 获取完整建表语句
相关推荐
ClouGence4 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
曹牧4 天前
Oracle EXPLAIN PLAN
数据库·oracle
贤时间4 天前
codex 助力oracle ebs 开发
数据库·oracle
秉承初心4 天前
PostgreSQL 数据性能瓶颈突破实战
数据库·postgresql·oracle
Curvatureflight5 天前
MySQL 深分页越来越慢?从 LIMIT OFFSET 改成游标分页
数据库·oracle
XZ-0700015 天前
MySQL事务
数据库·mysql·oracle
tiancaijiben5 天前
阿里云函数计算FC如何实现网站的定时任务与自动化
数据库·oracle·dba
xfhuangfu5 天前
Oracle 19c 多租户体系架构介绍
数据库·oracle·架构
杨云龙UP5 天前
Spotlight 接入 Oracle 数据库监控操作指南 2026-06-16
数据库·oracle·性能监控·预警·阈值·spotlight·瓶颈分析
unique5 天前
AI Coding 采集方案探索
jvm·人工智能·oracle