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 的 DESC 或 SHOW 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; 获取完整建表语句
相关推荐
其实防守也摸鱼1 小时前
DeepSeek Harness 开源贡献手记:从 Issue 到 Merge 的完整旅程
android·数据库·学习·ai·oracle·自动化
我叫洋洋14 小时前
Cadence CIS 元器件库合并实战:3000+ 焊盘、156 个符号零冲突并入自有库
数据库·单片机·嵌入式硬件·oracle·电路
晚风叙码21 小时前
MySQL 表的操作:从建表到删表,一篇讲清楚
android·mysql·oracle
其实防守也摸鱼1 天前
渗透测试学习计划(全栈综合 · 零基础进阶)
android·数据库·学习·安全·oracle·自动化·学习方法
无忧.芙桃1 天前
网络安全与个人信息保护
oracle
泡海椒1 天前
数据占比展示:jquick-pdf饼图动态数据渲染PDF教程
数据库·oracle·pdf
jnrjian2 天前
Connect Microsoft Tools to Oracle Databases powerbi 之类的oracle 客户端
数据库·microsoft·oracle
TDengine (老段)2 天前
集群从“能用“到“高可用“:副本、选主与故障切换到底怎么配
大数据·网络·数据库·物联网·oracle·时序数据库·tdengine
LRL_2 天前
【云原生】Oracle Linux 9.6 离线(Air-Gapped)环境下安装 Longhorn 及其底层依赖(iSCSI/NFS)完全指南
linux·云原生·oracle
lusklusklusk3 天前
Oracle数据库基础之2_体系结构
数据库·oracle