查询表主键外键信息的SQL

博主在BSOOC中需要查询表主键外键信息的SQL,经研究实现了Oracle和SQL Server的相关查询。给出了Oracle和SQL Server的具体SQL代码,暂未实现其他数据库的查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的BSOOC里需要一个查询表主键外键信息的SQL,昨晚研究到凌晨1点,终于能实现这个目标:
Oracle:
select o.obj# as objectId, o.name AS tableName, oc.name AS constraintName,
       decode(c.type#, 1, 'C', 2, 'P', 3, 'U',
              4, 'R', 5, 'V', 6, 'O', 7,'C', '?') as constraintType,
       col.name AS columnName
     
from sys.con$ oc, sys.con$ rc,
     sys.obj$ ro,sys.obj$ o, sys.obj$ oi,
     sys.cdef$ c,
     sys.col$ col, sys.ccol$ cc, sys.attrcol$ ac
where oc.con# = c.con#
  and c.obj# = o.obj#
  and c.rcon# = rc.con#(+)
  and c.enabled = oi.obj#(+)
  and c.robj# = ro.obj#(+)
  and c.type# != 8
  and c.type# != 12       /* don't include log groups */
  and c.con# = cc.con#
  and cc.obj# = col.obj#
  and cc.intcol# = col.intcol#
  and cc.obj# = o.obj#
  and col.obj# = ac.obj#(+)
  and col.intcol# = ac.intcol#(+)
  and o.name = 'your table'
 
SQL Server:

SELECT sysobjects.id objectId,
OBJECT_NAME(sysobjects.parent_obj) tableName,
sysobjects.name constraintName,
sysobjects.xtype AS constraintType,
syscolumns.name AS columnName
FROM sysobjects INNER JOIN sysconstraints
ON sysobjects.xtype in('C', 'F', 'PK', 'UQ', 'D')
 AND sysobjects.id = sysconstraints.constid
LEFT OUTER JOIN syscolumns ON sysconstraints.id = syscolumns.id
WHERE OBJECT_NAME(sysobjects.parent_obj)='your table'
 
其它数据库还没时间去实现.
### Navicat 中查看或导出表的主键信息 在 Navicat 工具中,可以通过多种方式来查看或导出表的主键信息。以下是具体方法: #### 方法一:通过 SQL 查询获取主键信息 Navicat 提供了一个强大的功能——执行自定义 SQL 查询,从而提取数据库元数据。要获取某个数据库中所有表的主键信息,可以使用以下 SQL 语句。 ##### 获取主键信息 ```sql SELECT TABLE_NAME AS 表名, COLUMN_NAME AS 主键列名 FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE CONSTRAINT_SCHEMA = 'your_database_name' AND CONSTRAINT_NAME LIKE 'PRIMARY'; ``` 此查询将返回指定数据库 `your_database_name` 的所有表及其对应的主键列名[^4]。 ##### 获取信息 ```sql SELECT TABLE_NAME AS 子表名, COLUMN_NAME AS 子表列名, REFERENCED_TABLE_NAME AS 父表名, REFERENCED_COLUMN_NAME AS 父表列名 FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE CONSTRAINT_SCHEMA = 'your_database_name' AND REFERENCED_TABLE_NAME IS NOT NULL; ``` 上述查询能够展示当前数据库中的关系,包括子表、父表以及它们之间关联的具体列名[^3]。 #### 方法二:利用 Navicat 图形界面手动查看 除了编写复杂的 SQL 查询,还可以直接借助 Navicat 的图形化用户界面快速定位主键信息。 1. **连接目标数据库**:启动 Navicat 并成功登录至所需操作的目标数据库实例; 2. **展开对应模式下的表格节点**:找到并点击感兴趣的特定表项; 3. **进入设计视图**:双击所选中的表对象或者右菜单选择“设计表”,此时会弹出详细的编辑窗口,在这里可以看到每一列属性设置情况,其中包括是否为主键标记以及其他约束条件说明等细节描述部分; 对于,则可以在同一界面上方标签页切换至「索引/」选项卡下查找已设定好的参照完整性规则列表。 #### 方法三:批量导出为文档形式保存记录 当需要一次性整理多个表的设计详情(含主键及其他备注等内容),可采用如下步骤完成自动化处理流程: 1. 构建综合型查询脚本,整合前述两种类型的检索逻辑形成统一报表输出样式; 2. 将最终得到的结果集按照固定模板格式存储成文件类型如 Word 文档以便后续查阅分享用途。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值