我有一个表(好吧有很多),索引包含一个逗号
....
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,title
ON table
ALTER TABLE table
DROP INDEX content,title
转义:
ALTER TABLE articles
DROP INDEX description\,title
各种形式的逃避,也尝试使用LIKE和野性角色。
实际错误:Can't DROP 'description,title'; check that column/key exists
@CodeBird
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)
答案 0 :(得分: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%'
答案 1 :(得分:0)
下面的命令应该有效,如果收到任何错误,请再次检查并分享:
ALTER TABLE `mytable` DROP INDEX `content,title`;
你可以查看下面的sqlfiddle:首先构建上面的语句,然后使用上面的语句,它将成功删除索引。 fulltext index drop
答案 2 :(得分: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
可以为您节省这些麻烦。