Error number: MY-013022; Symbol: ER_IB_MSG_1197; SQLSTATE: HY000
Message: %s
错误说明:
MY-013022是MySQL的一个错误代码,对应的SQLSTATE是HY000,错误信息是ER_IB_MSG_1197,意思是“不允许操作多列索引上的聚集索引,因为这是一个无效的InnoDB参数”。
当某一列是聚集索引,而另一列也想把它当作索引列时,会出现 MY-013022 错误。比如,我们给一张表 User 建立一个索引 ‘name_age’, 既包含 name 又包含 age 字段;如果我们已经把 age字段当作聚集索引了,把name也当作索引列,会报出MY-013022错误。
解决方法:
首先,应该确认是哪一列是聚集索引,根据业务的需求,name或age字段将作为索引列,另一个字段将作为聚集索引。若要查看总的索引,可以执行 SELECT * FROM information_schema.innodb_sys_indexes WHERE object_id = object_id(‘User’); 来获取对应的信息。
其次,应该把不需要的聚集索引删除掉,可使用 ALTER TABLE User DROP INDEX age 。避免多一个不需要的聚集索引,也可以避免多次出错。
最后,可以重新建立需要的索引。比如,在上面的例子,需要重新建立name_age这个索引,可以使用: ALTER TABLE User ADD INDEX name_age(name, age);
总的来说,MY-013022是操作多列索引上的聚集索引无效的一个错误提示,应该先确认有没有聚集索引,如果有,则先删除掉不需要的,然后再重新建立需要的多列索引。