Error number: MY-013649; Symbol: ER_IB_ERR_FOUND_N_RECORDS_WRONG_ORDER; SQLSTATE: HY000
Message: %s
MY-013649;ER_IB_ERR_FOUND_N_RECORDS_WRONG_ORDER;HY000是MySQL中的错误号,它指的是通过InnoDB错误检测到的记录排序错误,指的是在DDL界面或者SQL界面对表或者物理存储结构做删除等操作时可能会触发报表排序错误,提示找到的记录不正确的排序。
错误说明:
MySQL的ER_IB_ERR_FOUND_N_RECORDS_WRONG_ORDER错误代码MY-013649(HY000)表示通过InnoDB检测到的记录排序错误,该错误在DDL界面或者SQL界面对表进行操作时被触发。InnoDB表原始数据存储先按照索引顺序进行顺序存储,我们使用SQL DELETE操作或者ALTER TABLE操作在有物理调整时会造成索引数据矛盾,从而触发ER_IB_ERR_FOUND_N_RECORDS_WRONG_ORDER错误。
1. 有一张表t1,除了int类型的字段a和b外,表t1中还有字符类型的字段c。由于要删除字段c,操作者执行以下语句:
ALTER TABLE t1 DROP COLUMN c;
这时,MySQL会报ER_IB_ERR_FOUND_N_RECORDS_WRONG_ORDER错误,提示查找到记录未能正确排序。
2. 如果当操作者使用DELETE语句从一张表t1中删除一些记录,但是记录中有部分没有按照索引字段的顺序排列就会发生ER_IB_ERR_FOUND_N_RECORDS_WRONG_ORDER错误。
解决方法:
1. 如果是ALTER TABLE DROP COLUMN导致的ER_IB_ERR_FOUND_N_RECORDS_WRONG_ORDER错误,操作者可以通过重构表的方式解决该错误,ALTER TABLE在重构之前和之后的结构要保持一致,操作者可以通过以下语句重构表:
ALTER TABLE t1 ENGINE=InnoDB;
2. 对于DELETE操作,操作者应该保证DELETE语句中索引字段的排序是正确的,使用ORDER BY子句可以按照索引字段的顺序,从正确的记录开始删除,而不是从最后开始删除。