不要打扰 DESCRIBE,因为正如您所发现的,它在某些情况下会提供模棱两可的信息。
只需使用SHOW CREATE TABLE。这将准确显示重新创建表的 SQL 语法。然后你就可以确切地知道存在哪些键,以及什么类型。
mysql> show create table test_table\G
*************************** 1. row ***************************
Table: test_table
Create Table: CREATE TABLE `test_table` (
`leftkey` int(10) unsigned DEFAULT NULL,
`rightkey` int(10) unsigned DEFAULT NULL,
UNIQUE KEY `leftkey` (`leftkey`,`rightkey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
您也可以查询INFORMATION_SCHEMA.STATISTICS获取更精准的信息。
mysql> select * from information_schema.statistics where table_name='test_table'\G
*************************** 1. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: test
TABLE_NAME: test_table
NON_UNIQUE: 0
INDEX_SCHEMA: test
INDEX_NAME: leftkey
SEQ_IN_INDEX: 1
COLUMN_NAME: leftkey
COLLATION: A
CARDINALITY: 0
SUB_PART: NULL
PACKED: NULL
NULLABLE: YES
INDEX_TYPE: BTREE
COMMENT:
INDEX_COMMENT:
*************************** 2. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: test
TABLE_NAME: test_table
NON_UNIQUE: 0
INDEX_SCHEMA: test
INDEX_NAME: leftkey
SEQ_IN_INDEX: 2
COLUMN_NAME: rightkey
COLLATION: A
CARDINALITY: 0
SUB_PART: NULL
PACKED: NULL
NULLABLE: YES
INDEX_TYPE: BTREE
COMMENT:
INDEX_COMMENT:
或者INFORMATION_SCHEMA.KEY_COLUMN_USAGE 表的信息略有不同:
mysql> select * from information_schema.key_column_usage where table_name = 'test_table'\G
*************************** 1. row ***************************
CONSTRAINT_CATALOG: def
CONSTRAINT_SCHEMA: test
CONSTRAINT_NAME: leftkey
TABLE_CATALOG: def
TABLE_SCHEMA: test
TABLE_NAME: test_table
COLUMN_NAME: leftkey
ORDINAL_POSITION: 1
POSITION_IN_UNIQUE_CONSTRAINT: NULL
REFERENCED_TABLE_SCHEMA: NULL
REFERENCED_TABLE_NAME: NULL
REFERENCED_COLUMN_NAME: NULL
*************************** 2. row ***************************
CONSTRAINT_CATALOG: def
CONSTRAINT_SCHEMA: test
CONSTRAINT_NAME: leftkey
TABLE_CATALOG: def
TABLE_SCHEMA: test
TABLE_NAME: test_table
COLUMN_NAME: rightkey
ORDINAL_POSITION: 2
POSITION_IN_UNIQUE_CONSTRAINT: NULL
REFERENCED_TABLE_SCHEMA: NULL
REFERENCED_TABLE_NAME: NULL
REFERENCED_COLUMN_NAME: NULL