如何在 HSQLDB 1.8 中查找表的标识列

Posted

技术标签:

【中文标题】如何在 HSQLDB 1.8 中查找表的标识列【英文标题】:How to find identity columns of a table in HSQLDB 1.8 【发布时间】:2014-05-08 10:43:50 【问题描述】:

在 DB2 中,可以借助以下查询来完成,但我在 HSQLDB 中找不到这样做的方法

SELECT COLNAME FROM SYSCAT.COLUMNS WHERE IDENTITY = 'Y' AND TABNAME='XXX'.

以下是我可以看到的表 SYSTEM_COLUMNS 的列,我无法确定其中哪一个表明它是标识列

TYPE_SUB

TYPE_NAME

TABLE_SCHEM

TABLE_NAME

TABLE_CAT

SQL_DATETIME_SUB

SQL_DATA_TYPE

SOURCE_DATA_TYPE

SCOPE_TABLE

SCOPE_SCHEMA

SCOPE_CATLOG

备注

ORDINAL_POSITION

NUM_PREC_RADIX

可为空

IS_NULLABLE

DECIMAL_DIGITS

DATA_TYPE

COLUMN_SIZE

COLUMN_NAME

COLUMN_DEF

CHAR_OCTET_LENGTH

BUFFER_LENGTH

【问题讨论】:

身份列是什么意思?组成主键的列? 我的意思是有一个列的值是由数据库标识符生成器生成的,如序列、hilo、增量。 【参考方案1】:

应该这样做:

select column_name, 
       generation_expression, 
       is_generated, 
       is_identity, 
       identity_generation, 
       identity_start, 
       identity_increment 
from information_schema.columns 
where table_name =  'XXX'
  and table_schema =  'PUBLIC'
  and is_identity = 'YES'  

【讨论】:

这不适用于 hsqldb 1.8 版,有什么帮助吗? @AlokChandna:您应该提到您使用的是完全过时的 HSQLDB 版本。系统视图当时被命名为INFORMATION_SCHEMA.SYSTEM_COLUMNS 是的,我知道了,但它没有 is_identity 列 @AlokChandna:那我不知道。那是很久以前的事了。 is_generated 不应该是同一个意思吗?

以上是关于如何在 HSQLDB 1.8 中查找表的标识列的主要内容,如果未能解决你的问题,请参考以下文章

hibernate hsqldb 标识列无法插入新字段

如何在表的每一行中查找哪一列包含特定值

如何在 Hypersql 数据库(HSQLDB)中选择多列但仅按一列分组?

Java和HSQLDB,更新后如何自动添加列

HSQLDB 1.8 不能在派生表中进行排序?

如何从 SELECT 加速 HSQLDB UPDATE?