难道Mysqlinformation_schema不能和show createtable对齐吗?

Can Mysql information_schema not be aligned with show create table?

information_schema 中似乎缺少数据。 show create table 不同于 information_schema。

当我 运行: SHOW CREATE TABLE devicoserver.email_templates;

我得到 4 把钥匙:

CREATE TABLE `email_templates` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `subject` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email_type` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
  `language_id` int(10) unsigned NOT NULL,

  PRIMARY KEY (`id`),
  KEY `email_templates_language_id_foreign` (`language_id`),
  KEY `email_templates_email_type_unique` (`email_type`),
  KEY `email_templates_subject_unique` (`subject`),
  CONSTRAINT `email_templates_language_id_foreign` FOREIGN KEY (`language_id`) REFERENCES `languages` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

但是,当我查询信息模式时,它表明只有 2 个键

    select 
         CONSTRAINT_NAME,COLUMN_NAME FROM
         INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE TABLE_NAME = 'email_templates' and CONSTRAINT_SCHEMA = 'devicoserver';

PRIMARY, id
email_templates_language_id_foreign,language_id

这有意义吗,information_schema 与实际的 table 不同吗? 我知道它是真实的,因为我试图创建一个密钥,但我发现它已经存在了。

谢谢

你应该查询information_schema.statistics

例如

SELECT INDEX_NAME, GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) 
FROM `information_schema`.`statistics` 
WHERE table_schema = 'dbname' 
AND TABLE_NAME = 'tablename' 
GROUP BY INDEX_NAME 
ORDER BY INDEX_NAME ASC;