Error number: MY-012982; Symbol: ER_IB_MSG_1157; SQLSTATE: HY000
Message: %s
错误说明
ER_IB_MSG_1157是MySQL标准错误号,用于指示InnoDB存储引擎出现错误。其具体错误消息为:“TABLENAME不是InnoDB表”。ER_IB_MSG_1157表明指定的表不是InnoDB表,而是其他类型的表。这是一个发生频率较高的错误,特别是当我们尝试使用某些特定于InnoDB的命令或功能时,就可能出现。
常见案例
这个错误可以有多种情况发生。一种极其常见的情况是,某些应用程序尝试连接数据库,然后将他们特定的表转换为InnoDB表,然后再次尝试连接;如果用户没有显式地定义表类型为InnoDB,MySQL将抛出上述错误。此外,在执行语句时尝试使用InnoDB特定函数(例如Transactional DDL)也可能导致此错误。
解决方法
显而易见,ER_IB_MSG_1157错误表明表不是InnoDB类型。当发生这种情况时,应立即检查表,以确定它是否正确定义为InnoDB类型;要确认表是InnoDB类型,只需使用以下语句:
SHOW TABLE STATUS LIKE ‘TABLENAME’;
如果Engine变量中显示的不是InnoDB,可以使用以下命令重新定义表的类型:
ALTER TABLE TABLENAME ENGINE=InnoDB;
对于任何无法执行的查询,请检查是否包含只有InnoDB才支持的语句(例如Transactional DDL)。一些库(例如phpMyAdmin)的可视化界面也可能提示该错误,即使实际上已经正确定义了表类型为InnoDB。如果此类存在,请检查,然后关闭和重新启动Web服务器,以解决此问题。