gpt4 book ai didi

mysql - 独立于 DBMS 的方式访问表模式,包括主键(如果有)

转载 作者:行者123 更新时间:2023-11-29 23:51:56 26 4
gpt4 key购买 nike

我需要使用 JDBC/Java 验证表架构。在 MySQL 和 H2 中,我可以发出以下查询:

SHOW COLUMNS FROM City;

有输出

+------------+----------+------+-----+---------+----------------+
| COLUMN_NAME| TYPE | Null | KEY | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | char(35) | NO | | | |
| Country | char(3) | NO | UNI | | |
| District | char(20) | YES | MUL | | |
| Population | int(11) | NO | | 0 | |
+------------+----------+------+-----+---------+----------------+

我只对 COLUMN_NAMETYPEKEY 列感兴趣

但是,PostgreSQL 不支持此查询。我根据 this post 尝试了各种组合如下所示,但我得到了奇怪的结果。

SELECT c.COLUMN_NAME as COLUMN_NAME, c.DATA_TYPE as TYPE, 
CASE WHEN pk.COLUMN_NAME IS NOT NULL THEN 'PRI' ELSE '' END AS KEY
FROM INFORMATION_SCHEMA.COLUMNS c
LEFT JOIN (
SELECT ku.TABLE_CATALOG,ku.TABLE_SCHEMA,ku.TABLE_NAME,ku.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS ku
ON tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
AND tc.CONSTRAINT_NAME = ku.CONSTRAINT_NAME
) pk
ON c.TABLE_CATALOG = pk.TABLE_CATALOG
AND c.TABLE_SCHEMA = pk.TABLE_SCHEMA
AND c.TABLE_NAME = pk.TABLE_NAME
AND c.COLUMN_NAME = pk.COLUMN_NAME
WHERE c.TABLE_NAME = 'City'

任何人都可以帮助正确的 SQL。

编辑:问题已解决。我没有得到某些表的条目,而某些表则得到了正确的条目。这是在表名中使用大写的问题。我使用小写的city并且效果很好。

最佳答案

如果使用 JDBC,则可以使用 JDBC's metadata features .

对于独立于驱动程序的选项,您可以查询information_schema - 在本例中,您需要information_schema.tablesinformation_schema.columnsinformation_schema.table_constraintsinformation_schema.key_column_usage

关于mysql - 独立于 DBMS 的方式访问表模式,包括主键(如果有),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25594041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com