库实例多表多的情况下,无响应
原来的SQL==>
SELECT
A.REFERENCED_TABLE_SCHEMA AS PKTABLE_CAT,
NULL AS PKTABLE_SCHEM,
A.REFERENCED_TABLE_NAME AS PKTABLE_NAME,
A.REFERENCED_COLUMN_NAME AS PKCOLUMN_NAME,
A.TABLE_SCHEMA AS FKTABLE_CAT,
NULL AS FKTABLE_SCHEM,
A.TABLE_NAME AS FKTABLE_NAME,
A.COLUMN_NAME AS FKCOLUMN_NAME,
A.ORDINAL_POSITION AS KEY_SEQ,
CASE
WHEN R.UPDATE_RULE = 'CASCADE' THEN
0
WHEN R.UPDATE_RULE = 'SET NULL' THEN
2
WHEN R.UPDATE_RULE = 'SET DEFAULT' THEN
4
WHEN R.UPDATE_RULE = 'RESTRICT' THEN
1
WHEN R.UPDATE_RULE = 'NO ACTION' THEN
1 ELSE 1
END AS UPDATE_RULE,
CASE
WHEN R.DELETE_RULE = 'CASCADE' THEN
0
WHEN R.DELETE_RULE = 'SET NULL' THEN
2
WHEN R.DELETE_RULE = 'SET DEFAULT' THEN
4
WHEN R.DELETE_RULE = 'RESTRICT' THEN
1
WHEN R.DELETE_RULE = 'NO ACTION' THEN
1 ELSE 1
END AS DELETE_RULE,
A.CONSTRAINT_NAME AS FK_NAME,
(
SELECT
CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
TABLE_SCHEMA = A.REFERENCED_TABLE_SCHEMA
AND TABLE_NAME = A.REFERENCED_TABLE_NAME
AND CONSTRAINT_TYPE IN ( 'UNIQUE', 'PRIMARY KEY' )
LIMIT 1
) AS PK_NAME,
7 AS DEFERRABILITY
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE A
JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS B USING ( CONSTRAINT_NAME, TABLE_NAME )
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS R ON ( R.CONSTRAINT_NAME = B.CONSTRAINT_NAME AND R.TABLE_NAME = B.TABLE_NAME AND R.CONSTRAINT_SCHEMA = B.TABLE_SCHEMA )
WHERE
B.CONSTRAINT_TYPE = 'FOREIGN KEY'
AND A.TABLE_SCHEMA = 'demo'
AND A.TABLE_NAME = 'table1'
AND A.REFERENCED_TABLE_SCHEMA IS NOT NULL
ORDER BY
A.REFERENCED_TABLE_SCHEMA,
A.REFERENCED_TABLE_NAME,
A.ORDINAL_POSITION
;
改进后
==>新的
SELECT
A.REFERENCED_TABLE_SCHEMA AS PKTABLE_CAT,
NULL AS PKTABLE_SCHEM,
A.REFERENCED_TABLE_NAME AS PKTABLE_NAME,
A.REFERENCED_COLUMN_NAME AS PKCOLUMN_NAME,
A.TABLE_SCHEMA AS FKTABLE_CAT,
NULL AS FKTABLE_SCHEM,
A.TABLE_NAME AS FKTABLE_NAME,
A.COLUMN_NAME AS FKCOLUMN_NAME,
A.ORDINAL_POSITION AS KEY_SEQ,
CASE
WHEN R.UPDATE_RULE = 'CASCADE' THEN
0
WHEN R.UPDATE_RULE = 'SET NULL' THEN
2
WHEN R.UPDATE_RULE = 'SET DEFAULT' THEN
4
WHEN R.UPDATE_RULE = 'RESTRICT' THEN
1
WHEN R.UPDATE_RULE = 'NO ACTION' THEN
1 ELSE 1
END AS UPDATE_RULE,
CASE
WHEN R.DELETE_RULE = 'CASCADE' THEN
0
WHEN R.DELETE_RULE = 'SET NULL' THEN
2
WHEN R.DELETE_RULE = 'SET DEFAULT' THEN
4
WHEN R.DELETE_RULE = 'RESTRICT' THEN
1
WHEN R.DELETE_RULE = 'NO ACTION' THEN
1 ELSE 1
END AS DELETE_RULE,
A.CONSTRAINT_NAME AS FK_NAME,
(
SELECT
CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE
TABLE_SCHEMA = A.REFERENCED_TABLE_SCHEMA
AND TABLE_NAME = A.REFERENCED_TABLE_NAME
AND CONSTRAINT_TYPE IN ( 'UNIQUE', 'PRIMARY KEY' )
and TABLE_SCHEMA = 'demo'
and TABLE_NAME = 'table1'
LIMIT 1
) AS PK_NAME,
7 AS DEFERRABILITY
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE A
inner JOIN (
select CONSTRAINT_NAME,TABLE_NAME,TABLE_SCHEMA
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where CONSTRAINT_TYPE = 'FOREIGN KEY'
and TABLE_SCHEMA = 'demo'
and TABLE_NAME = 'table1'
group by CONSTRAINT_NAME,TABLE_NAME,TABLE_SCHEMA
) B
on a.CONSTRAINT_NAME=b.CONSTRAINT_NAME
and a.TABLE_NAME=b.TABLE_NAME
and a.TABLE_SCHEMA=b.TABLE_SCHEMA
inner JOIN (
select UPDATE_RULE,DELETE_RULE,CONSTRAINT_NAME,TABLE_NAME,CONSTRAINT_SCHEMA
from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
where CONSTRAINT_SCHEMA= 'demo'
and TABLE_NAME = 'table1'
group by UPDATE_RULE,DELETE_RULE,CONSTRAINT_NAME,TABLE_NAME,CONSTRAINT_SCHEMA
) R
ON R.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND R.TABLE_NAME = B.TABLE_NAME
AND R.CONSTRAINT_SCHEMA = B.TABLE_SCHEMA
WHERE A.TABLE_SCHEMA = 'demo'
AND A.TABLE_NAME = 'table1'
AND A.REFERENCED_TABLE_SCHEMA IS NOT NULL
ORDER BY
A.REFERENCED_TABLE_SCHEMA,
A.REFERENCED_TABLE_NAME,
A.ORDINAL_POSITION
;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
DataGear查询表基本信息使用的是数据库JDBC驱动的自带的API,没有自己通过SQL实现,性能也仅由数据库JDBC驱动而定
登录 后才可以发表评论