是否有人知道如何通过SQL
获取跨多个列的索引的列名(请参阅JDBC
)?我知道如何获取所有索引列(请参阅代码),但这样我无法看到哪些列链接到单个索引。
CREATE TABLE IF NOT EXISTS `foo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`test1` int(11) NOT NULL,
`test2` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `test1` (`test1`,`test2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
DatabaseMetaData md = connection.getMetaData(); // assumed that connection exists
ResultSet rs = md.getIndexInfo(null, dbSchema, "foo", true, false);
while (rs.next()) {
String columnName = rs.getString("COLUMN_NAME");
}
答案 0 :(得分:2)
对于多列索引,将在ResultSet中返回多个条目,其中包含相同的INDEX_NAME但不同的COLUMN_NAME
答案 1 :(得分:0)
一般建议:如果您想在Stackoverflow上提问之前查看某些信息是否可用,请查看Java API javadoc。如果您查看DatabaseMetaData.getIndexInfo()
的Javadoc,您会看到返回的结果集包含的列数远远超过COLUMN_NAME
。
出于您的目的,您还应该查看INDEX_NAME
和ORDINAL_POSITION
(如果您想知道索引中列的顺序)。对于复合索引,ResultSet
包含多行(即索引中每列一行)。
我的回答确实假设您的JDBC驱动程序正确实现并返回所有必需的信息。