sql - 用于选择数据库中所有 pk/fk 的 SQL 查询
问题描述
我尝试搜索一个查询,该查询给出一个大数据库的所有 pk 和 fk。由于我找不到任何好的查询,我想出了一个解决方案。
SELECT
cols.table_name, cols.column_name, cols.position, cons.status, cons.owner
FROM
all_constraints cons, all_cons_columns cols
WHERE
cols.owner = 'DATABASE_NAME'
AND cons.constraint_type = 'P'
AND cons.constraint_name = cols.constraint_name
AND cons.owner = cols.owner
ORDER BY
cols.table_name, cols.position;
唯一需要更改的是将“DATABASE_NAME”更改为特定的数据库名称!
我的问题是,是否有一种“更简单”的方法可以从一个大数据库中获取所有主键?
解决方案
查询的另一个版本可用于获取与表的外键关系,如下所示:
SELECT constr.table_name,
column_name,
position,
constr.constraint_name,
DECODE (constraint_type, 'P', 'Primary Key', 'Foreign Key') key_type,
(SELECT constr2.table_name
FROM all_constraints constr2
WHERE constr2.CONSTRAINT_NAME = constr.R_CONSTRAINT_NAME) fK_to_table
FROM all_cons_columns conscol, all_constraints constr
WHERE conscol.constraint_name = constr.constraint_name
AND conscol.table_name = constr.table_name
AND CONSTRAINT_TYPE IN ('P', 'R')
--AND constr.table_name = 'MYTEBLE' (your table here)
ORDER BY table_name, constraint_type, position;
输出将采用以下格式
TABLE_NAME COLUMN_NAME POSITION CONSTRAINT_NAME KEY_TYPE FK_TO_TABLE
ACCOUNT ACCOUNT_ID 1 ACCOUNT_PK Primary Key
ACCOUNT ACCOUNT_TYPE_ID 1 ACCOUNT_FK3 Foreign Key ACCOUNT_TYPE
推荐阅读
- python - 如何重新排列 3D 阵列
- javascript - DataTables ajax 请求 - 无法读取未定义的属性“长度”
- mysql - 更新 MySQL 不正确的语法
- sas - 将具有特定字符的列转置为行
- typescript - 将新字段推入嵌套数组
- gradle-kotlin-dsl - 如何在 Kotlin 中创建 Gradle Action 对象
- javascript - Vue.js 在冻结数组中的对象然后尝试修改它们时 v-model 和 :value 之间的区别
- javascript - 如何从 React Navigation 获取以前的路线名称
- android - LineageOS 在 macOS 10.14 上构建失败:Ninja 失败,退出状态为 1
- php - laravel 从 voyager 中的文本获取数组