2

我有一个包含逗号的索引的表(其中有一堆)

....
FULLTEXT KEY `description` (`description`),
  FULLTEXT KEY `description,title` (`description`,`title`), -- <-- HERE
  FULLTEXT KEY `content` (`content`),
  FULLTEXT KEY `content,title` (`content`,`title`)
) ENGINE=MyISAM AUTO_INCREMENT=150296 DEFAULT CHARSET=utf8

我正在迁移到 InnoDB + sphinx,所以想要删除所有 FULLTEXT 索引,这些被证明是一个问题。

引号:

DROP INDEX 'content,title' ON `table`
ALTER TABLE `table` DROP INDEX 'content,title'

反引号: DROP INDEX content,titleON table ALTER TABLE tableDROP INDEXcontent,title

转义:ALTER TABLE articlesDROP INDEXdescription\,title

各种形式的转义,也尝试过使用带野生字符的 LIKE。

实际错误:Can't DROP 'description,title'; check that column/key exists

@代码鸟

SELECT * FROM information_schema.STATISTICS WHERE TABLE_NAME='articles' AND TABLE_SCHEMA='test' AND INDEX_NAME LIKE 'descri%'\G
*************************** 1. row ***************************
TABLE_CATALOG: NULL
 TABLE_SCHEMA: test
   TABLE_NAME: articles
   NON_UNIQUE: 1
 INDEX_SCHEMA: test
   INDEX_NAME: description,title
 SEQ_IN_INDEX: 1
  COLUMN_NAME: description
    COLLATION: NULL
  CARDINALITY: NULL
     SUB_PART: NULL
       PACKED: NULL
     NULLABLE: YES
   INDEX_TYPE: FULLTEXT
      COMMENT:
*************************** 2. row ***************************
TABLE_CATALOG: NULL
 TABLE_SCHEMA: test
   TABLE_NAME: articles
   NON_UNIQUE: 1
 INDEX_SCHEMA: test
   INDEX_NAME: description,title
 SEQ_IN_INDEX: 2
  COLUMN_NAME: title
    COLLATION: NULL
  CARDINALITY: NULL
     SUB_PART: NULL
       PACKED: NULL
     NULLABLE: YES
   INDEX_TYPE: FULLTEXT
      COMMENT:
2 rows in set (0.00 sec)
4

3 回答 3

2

拥有 root 访问权限,您应该能够在 information_schema 中更新您的索引名称,然后尝试删除它们:

UPDATE information_schema.STATISTICS SET INDEX_NAME='to_be_dropped' 
WHERE TABLE_NAME='articles' AND TABLE_SCHEMA='test' 
AND INDEX_NAME LIKE 'descri%'
于 2014-05-01T13:55:10.107 回答
0

下面的命令应该可以工作,如果遇到任何错误,请再次检查并分享:

ALTER TABLE `mytable` DROP INDEX `content,title`;

您可以查看下面的sqlfiddle:首先构建上面的语句,然后使用上面的语句,它将成功删除索引。 全文索引下降

于 2014-05-01T13:44:26.873 回答
0

表名和列名必须用反引号引起来,但您使用的是单引号。(您在其他任何地方都正确使用了反引号)。

改变:

DROP INDEX 'content,title' ON `table`;
ALTER TABLE `table` DROP INDEX 'content,title';

至:

DROP INDEX `content,title` ON `table`;
ALTER TABLE `table` DROP INDEX `content,title`;

另外,我建议您不要使用需要引用的表/列/索引名称,因为正如您所见,这很麻烦且容易出错。一个索引名称content_title代替content,title会为您省去这个麻烦。

于 2014-05-01T13:45:05.873 回答